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.
Dans l'objet threadPool, j'essaie plusieurs formules (en commentaire dans le code suivant).
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;
Comme message d'erreur j'obtiens :
NO MATCHING FUNCTION FOR CALL TO INVOKE
ou alors
EXPRESSION CONTAINS UNEXPANDED PARAMETER PACK 'arg1'
Une suggestion ?
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) )); }
Partager