我正在寻找一种在c ++中的线程之间传递队列的方法,下面是我想要做的非常基本的概述。它作为一个函数工作,但我需要使用一个单独的线程,因为任务和main都将有单独的循环来执行。
这是功能:
void task1(queue <bool> &qPass)
{
bool bits[5] = { 1, 0, 0, 1, 1 };
for (int i = 0; i < 5; i++)
{
qPass.push(bits[i]);
}
cout << "Task:\tpush complete\t(" << qPass.size() << ")" << endl;
}
主要
int main()
{
queue <bool> qPass;
int n;
//thread task(task1, qPass);//thread call doesnt work
//task.join();
task1(qPass);//function call works
n = qPass.size();
cout << "Main:\t";
for (int i = 0; i < n; i++)
{
cout << qPass.front();
qPass.pop();
}
cout << "\t(" << n << ")" << endl;
cin.get();
return 0;
}
如果我对函数调用进行注释并取消注释线程调用,它将运行,但主要的队列不会被填充。提前谢谢。
答案 0 :(得分:1)
您需要将参数包装在引用包装器中:
std::thread task(task1, std::ref(qPass));
// ^^^^^^^^
(否则,线程对象会绑定队列的本地私有副本,并且永远不会触及您的主队列。)