我使用boost::bind
创建新的boost::thread
,并将其存储在boost::shared_ptr
中。
我正在向boost::thread
传递一个函数和参数,但是当线程启动时,它没有正确地调用函数参数的拷贝构造函数。将boost :: bind,boost :: shared_ptr和boost :: thread一起使用时未复制的构造函数
我使用的线程的创建方法是一种很常见的升压模式,所以我不认为这是问题的所在:
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
}
我想给Workflow
从myfunc()
复制到anotherfunc()
。
Workflow
包含一个集合,所以我提供了一个复制构造函数,将现有集合中的元素复制到新的Workflow
。
不幸的是,当新线程调用anotherfunc()
时,wfCopied
内部的集合为空!
我可以告诉Workflow
对象被部分复制,因为像字符串和整数等其他成员已被复制,但集合中的元素没有。
我已验证了拷贝构造函数通过使用此代码测试是否能够正常工作:
Workflow wf;
// ... insert some elements into wf...
Workflow wf1 = wf;
// wf1 has the same elements
我想强调的是,我的测试表明我Workflow
的拷贝构造函数工作正常。
但为了完整起见,这里是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);
}
谁能帮助我?
这是你的真实密码?使用`wf`作为`myclass :: anotherFunc`上的参数名和作为类成员似乎是可疑的。 – 2010-12-05 22:02:08