我举个例子来说明:
我有一个全局变量:
int B = 0;
一个处理函数:
void calculate1(int a, int b)
{
b = a;
}
当我们把calculate1()函数放到一个boost线程后:
boost::thread_group thrd;thrd.create_thread(boost::bind(&CMFCDlg::calculate1, this, 100, B));
我们期望boost线程处理跳出后 B 变成100,但实际上由于被bind到函数calculate1()中的变量是被复制了一份,而不是直接对原输入数据操作,所以全局变量 B 也被复制了,其本身并没有被赋值。当boost线程处理跳出后,B的值并没有被修改,依然是0,所以我觉得全局变量最好不要作为函数的实参传入,而是在函数体内直接使用比较好。为此,将函数calculate1()修改如下:
void calculate1(int a)
{
b = a;
}
再把calculate1()函数放到线程内:
boost::thread_group thrd;
thrd.create_thread(boost::bind(&CMFCDlg::calculate1, this, 100));
这样线程内部可以对全局变量 B 进行赋值操作,当线程跳出后 B = 100,得到我们想要的结果。