Bonsoir,

Je me suis inspiré d'un code source pour un thread pool qui est fourni dans "C++ Concurrency in Action: Practical Multithreading" d'Anthony Williams.
MAIS, en voulant ajouter un argument à la fonction qui estmise dans la queue des tâches, le programme bute sur la syntaxe...

Dans le code ci-dessous, imaginons que la fonction XYZ prend en argument l'indice de la boucle pour l'imprimer à l'écran.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
// -----Fonction XYZ 
void XYZ(int x){
std::cout<<"x=" << x <<  std::endl;
}
 
// ----- Création du Thread Pool et boucle de mise en queue d'un fonction XYZ 
threadPool* tPool = new threadPool();
for(int i=0; i<100; ++i) 
tPool->submit(XYZ, i);
delete tPool;
Dans l'objet threadPool, j'essaie plusieurs formules (en commentaire dans le code suivant).
Comme message d'erreur j'obtiens :
NO MATCHING FUNCTION FOR CALL TO INVOKE
ou alors
EXPRESSION CONTAINS UNEXPANDED PARAMETER PACK 'arg1'
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
template<typename FunctionType, typename... Args>
		void submit(FunctionType f, Args&&... arg1){
		   //	workQueue.push(std::bind(f, std::forward<Args>(arg1)...));
		 //  	workQueue.push( std::bind(f, std::ref(arg1) ));
			}
Une suggestion ?