C++ 11 : Démarrer le thread avec la fonction de membre et ce en tant que paramètre
L'aide de ce code, je l'ai eu et erreur :
Erreur 1 erreur C2064: terme n'évalue pas à une fonction prenant 1 arguments c:\program files (x86)\microsoft visual studio 11.0\vc\include\fonctionnelle 1152 1 Pipeline
class PipelineJob {
private:
std::thread *thread;
void execute(PipelineJob* object);
public:
void execute(PipelineJob* object)
{
}
PipelineJob()
{
this->thread = new std::thread(&PipelineJob::execute, this);
}
};
J'ai essayé beaucoup de variation, tout un maintenant comment résoudre ce problème?
- La conception avec des pointeurs et
new
est ridicule et terrible. Vous devez utiliser un constructeur de liste d'initialiseur. - Aussi, votre code n'a pas de sens. Est
PipelineJob
d'une classe ou d'un modèle? - hmm, j'ai essayé avec la liste d'initialisation, mais j'étais encore une erreur de construire parce que j'essayais de l'accès le constructeur par défaut qui n'existe pas.
- J'ai enlevé tous les code pas utile pour le problème.
- double possible de Démarrer le thread avec la fonction de membre
- Pourquoi est -
execute
déclarée deux fois?
Vous devez vous connecter pour publier un commentaire.
Supprimant les modèles et les pointeurs pour des raisons de simplicité, c'est plus ou moins ce que vous souhaitez:
Noter que
this
est passé deux fois à lastd::thread
constructeur: une fois pour la fonction de membre implicite du premier paramètre, le deuxième pour le paramètre visiblePipelineJob* object
de la fonction membre.Si votre
execute
fonction membre n'a pas besoin d'une source externePipelineJob
pointeur, alors vous besoin de quelque chose commethread_
?this
deux fois? Je pense que l'OP juste mal compris ce que les fonctions membres sont...execute
avec différentsPipelineJob
instances. Dans cet exemple, j'utilisethis
deux fois, mais il n'a pas à être comme ça. Vous pourriez avoir des pointeurs vers deuxPipelineJob
instances.execute
avecthis
. Probablement juste être plus prudent.