Je crée un nouveau boost::thread
en utilisant boost::bind
, et je le stocke dans un boost::shared_ptr
.
Je passe une fonction et un argument au boost::thread
, mais lorsque le thread est démarré, il n'appelle pas correctement le constructeur de copie pour l'argument de la fonction.Constructeur de copie non appelé lors de l'utilisation de boost :: bind, boost :: shared_ptr et boost :: thread ensemble
La méthode de création de fil J'utilise est un modèle Boost très commun, donc je ne pense pas que ce soit là le problème:
void myclass::myfunc() {
Workflow wfOriginal;
boost::shared_ptr<boost::thread>(
new boost::thread(boost::bind(&myclass::anotherfunc, this, wfOriginal)));
}
// ...
void myclass::anotherfunc(Workflow wfCopied) {
// Doing something
}
Je suis en train de copier le Workflow
de myfunc()
à anotherfunc()
.
Workflow
contient une collection, donc j'ai fourni un constructeur de copie qui copie les éléments à l'intérieur de la collection existante au nouveau Workflow
.
Malheureusement, lorsque anotherfunc()
est appelée par le nouveau thread, la collection wfCopied
est vide!
Je peux dire que l'objet Workflow
a été partiellement copié, parce que d'autres membres comme les chaînes et les ints ont été copiés, mais pas les éléments de la collection.
J'ai vérifié que le constructeur de copie fonctionne correctement en testant avec ce code:
Workflow wf;
// ... insert some elements into wf...
Workflow wf1 = wf;
// wf1 has the same elements
Je tiens à souligner que mes tests ont montré que me Workflow
EXEMPLAIRE constructeur fonctionne très bien.
Mais pour être complet, voici le constructeur de copie pour Workflow
:
Workflow::Workflow(const Workflow& workflow) {
this->_id = workflow._id;
(this->_tasks).clear();
Workflow::TaskCollectionConstIterator it;
for (it = (this->_tasks).begin(); it < (this->_tasks).end(); it++)
(this->_tasks).push_back(*it);
}
Quelqu'un peut-il me aider?
Est-ce votre vrai code? l'utilisation de 'wf' à la fois comme nom de paramètre sur' myclass :: anotherFunc' et comme membre de la classe semble suspect. –