将项目添加到队列时运行线程

时间:2018-09-17 04:33:34

标签: c++ windows multithreading queue

我正在VS2017中用C ++开发Windows应用程序 我必须在线程中执行一些数据(存储在队列中)处理,但是仅当队列中存在项目时才可以。

thread
{
if(!queue.empty()
{
//process data and pop out 
}
}

但是当队列mayb排空并且有时有数据时,我有机会做到这一点吗?

我试图在线程中运行整个循环,但这是无效的,经过一段时间优化的广告应用程序变得无响应

 thread
{
    while(true)
    {
        if(!queue.empty()
        {
            //process data and pop out 
        }
    }
}

请支持并帮助您了解如何有效地完成此任务?

2 个答案:

答案 0 :(得分:1)

您要寻找的是称为condition_variable的东西。它将使您的工作线程在无事可做时暂停,然后在另一个线程将某些内容插入队列(并通知您的condition_variable解除阻止)后立即恢复。

示例herehere比我所写的任何东西都要好。

答案 1 :(得分:0)

@selbie的答案帮助做到了这一点

thread
{
    while(true)
    {
        if(condition_varibale not TURE wait here)

        if(!queue.empty()
        {
            //process data and pop out 
        }
    }
}

在将项目添加到队列时更新条件变量。