Passer plusieurs arguments à une fonction filetée
J'ai une fonction appelée workForThread, qui prend deux arguments, et renvoie void. J'aimerais les enfiler cette fonction en utilisant quelque chose comme:
thread(workForThread,a,b);
Où a
et b
sont les types appropriés. Le code ci-dessus ne compile pas, en donnant un "trop d'arguments pour appeler" erreur ("erreur C2197: 'void (__cdecl *)(char *)' : trop d'arguments pour call")
Comment puis-je résoudre ce problème?
Remarque: j'ai regardé ces deux questions, mais les résolutions qui y travaillent ne semble pas fonctionner pour moi. En outre, j'ai le sentiment qu'il y est un moyen de le faire construit en c++11, et c'est ce que je suis à la recherche d'.
C++11 thread a un (modélisé) constructeur qui fait exactement cela.
Alors pourquoi est-il me donner cette erreur?
Quelle est la version de VS en avez-vous? Peut-être qu'il ne supporte pas que.
Pas familier avec VS, mais je pense que cette version devrait fonctionner, et je pense que le message d'erreur semble très étrange. Quelle est la signature de la fonction que vous utilisez?
Le vote pour la fermer, car le vrai problème est dans le code de l'OP ne nous montre pas.
Alors pourquoi est-il me donner cette erreur?
Quelle est la version de VS en avez-vous? Peut-être qu'il ne supporte pas que.
Pas familier avec VS, mais je pense que cette version devrait fonctionner, et je pense que le message d'erreur semble très étrange. Quelle est la signature de la fonction que vous utilisez?
Le vote pour la fermer, car le vrai problème est dans le code de l'OP ne nous montre pas.
OriginalL'auteur soandos | 2012-05-07
Vous devez vous connecter pour publier un commentaire.
Lors de l'utilisation de C++11, vous pouvez utiliser une fonction lambda qui peut utiliser (non formel) paramètres du contexte. "La capture"
Quelque chose comme
Lorsque seul l'appel d'une fonction unique juanchopanza réponse peut-être un peu plus efficace, car aucune nouvelle fonction sera créé.
Le lambda version vous permet de configurer plus. Disons que vous êtes à partir de threads qui appelle à la fin 2 fonctions 3. juanchopanza approche exigerait des fonctions NOMMÉES pour chaque permutation.
Pour le moment, je considère que la différence de ces deux approches sera surtout une question de goût.
Lorsque vous souhaitez lire plus sur les lambda fonctions
Qu'est ce qu'une lambda expression en C++11?
Où doIt est ma fonction?
Maintenant cette compile, mais casues une erreur fatale dans "__declspec(noinline) void __cdecl _CRT_DEBUGGER_HOOK(int _Reserved)" aucune idée de ce qui en est la cause?
Absolument pas besoin de la fonction lambda en C++11.
il n'est pas pertinent, vous n'avez vraiment pas besoin de la lambda ici. Il est tout à fait inutile.
OriginalL'auteur stefan bachert
En C++11, la façon de le faire est plus ou moins la manière dont vous avez tenté:
fourni workForThread est un (non-membre) fonction qui prend ces deux paramètres.
qu'entendez-vous pas surchargé?
disons que vous avez workforthread(int, int) et workforthread(int), alors ce ne sera pas compilé.
ni tout autre code qui appelle la fonction avec deux arguments. OP dit: "j'ai une fonction appelée workForThread, qui prend deux arguments, et renvoie void.".
OriginalL'auteur juanchopanza