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负载最大,这是对的吗?