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

问题描述 投票:0回答:2

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

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

但是队列mayb有空的时候有机会有数据,所以我怎么能实现这个呢?

我尝试在线程中运行整个循环,但这不是有效的,优化的广告应用程序在一段时间后变得没有响应

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

请支持并帮助了解如何有效地完成这项工作?

c++ windows multithreading queue
2个回答
1
投票

你寻求的是一种叫做condition_variable的东西。它将允许您的工作线程在无事可做时暂停,然后在另一个线程将某些东西插入队列后立即恢复(并通知您的condition_variable取消阻止)。

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


0
投票

来自@selbie的回答有助于这样做如下

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.