我正在VS2017中用C ++开发Windows应用程序 我必须在线程中执行一些数据(存储在队列中)处理,但是仅当队列中存在项目时才可以。
thread
{
if(!queue.empty()
{
//process data and pop out
}
}
但是当队列mayb排空并且有时有数据时,我有机会做到这一点吗?
我试图在线程中运行整个循环,但这是无效的,经过一段时间优化的广告应用程序变得无响应
thread
{
while(true)
{
if(!queue.empty()
{
//process data and pop out
}
}
}
请支持并帮助您了解如何有效地完成此任务?
答案 0 :(得分:1)
您要寻找的是称为condition_variable的东西。它将使您的工作线程在无事可做时暂停,然后在另一个线程将某些内容插入队列(并通知您的condition_variable解除阻止)后立即恢复。
答案 1 :(得分:0)
@selbie的答案帮助做到了这一点
thread
{
while(true)
{
if(condition_varibale not TURE wait here)
if(!queue.empty()
{
//process data and pop out
}
}
}
在将项目添加到队列时更新条件变量。