thread pool et submit(fonction)
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:
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:
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 ?