我正在VS2017中用C ++开发一个Windows应用程序我必须在一个线程中执行一些数据(存储在队列中)处理,但只有当队列中存在项目时。
thread
{
if(!queue.empty()
{
//process data and pop out
}
}
但是队列mayb有空的时候有机会有数据,所以我怎么能实现这个呢?
我尝试在线程中运行整个循环,但这不是有效的,优化的广告应用程序在一段时间后变得没有响应
thread
{
while(true)
{
if(!queue.empty()
{
//process data and pop out
}
}
}
请支持并帮助了解如何有效地完成这项工作?
你寻求的是一种叫做condition_variable的东西。它将允许您的工作线程在无事可做时暂停,然后在另一个线程将某些东西插入队列后立即恢复(并通知您的condition_variable取消阻止)。
来自@selbie的回答有助于这样做如下
thread
{
while(true)
{
if(condition_varibale not TURE wait here)
if(!queue.empty()
{
//process data and pop out
}
}
}
将项添加到队列时更新条件变量。