我正在寻找一种在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;
}


如果我注释函数调用并取消注释线程调用,它将运行,但是main中的队列未满。提前致谢。

最佳答案

您需要将参数包装在参考包装中:

std::thread task(task1, std::ref(qPass));
//                      ^^^^^^^^


(否则,线程对象将绑定队列的本地私有副本,并且永远不会触及您的主队列。)

10-05 19:56