C++11 如何降低cpu密集度?

C++11 如何降低cpu密集度?,c++11,boost,boost-thread,task-queue,C++11,Boost,Boost Thread,Task Queue,我有一个线程在循环中运行并执行任务 outTask::Task* task; while (!m_out_stop) { println("abc"); while (m_outQueue.pop(task)) { println("123"); task->execute(); } } 如何降低CPU密集度?我可以让线程在每个任务之间休眠,但这会导致延迟,因此不是理想的解决方案 备注:打印语句用于调试目的。如果您在windows中

我有一个线程在循环中运行并执行任务

outTask::Task* task;
while (!m_out_stop) {
    println("abc");
    while (m_outQueue.pop(task)) {
        println("123");
        task->execute();
    }
}
如何降低CPU密集度?我可以让线程在每个任务之间休眠,但这会导致延迟,因此不是理想的解决方案


备注:打印语句用于调试目的。

如果您在windows中工作,可以使用SetThreadPriority:

outTask::Task* task;
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_BELOW_NORMAL);
while (!m_out_stop) {
.....

它使您的工作线程运行最慢,但不会停止它

谢谢。这是跨平台的吗?不,我在回答中告诉你(“如果你在windows中工作”)对不起,我没听到。我的badwith boost您可以使用boost::this_thread::yield()。使用H c++11,您可以至少在windows上使用std::this_thread::yield()@user5976242,
yield
不会减少CPU使用。如果您让步,但调度程序在该cpu上没有其他线程可调度,它将立即重新调度您的线程,从而限制cpu。@sbabbi您是对的。我想我只是不明白这个问题。如果没有其他线程可以运行,那么我希望使用最大CPU来完成我的任务(我不在乎它是否是CPU密集型的)。但是,如果我的任务占用了CPU,并阻止其他线程顺利响应/运行,那么我希望让步。当队列为空且循环只不断检查
m\u out\u stop
时,CPU负载最大,这是对的吗?