У меня есть поток, который работает в цикле и выполняет задачи.Как я могу сделать это менее интенсивным?
outTask::Task* task;
while (!m_out_stop) {
println("abc");
while (m_outQueue.pop(task)) {
println("123");
task->execute();
}
}
Как я могу сделать это менее интенсивным? Я мог бы заставить поток спать между каждой задачей, но это может вызвать задержку и, следовательно, не является идеальным решением.
Ps. Заявления для печати предназначены для целей отладки.
с усилением вы могли бы использовать повышение :: this_thread :: выход() , withh C++ 11 можно использовать std :: this_thread :: yield() – user5976242
@ user5976242 По крайней мере, в окнах 'yield' не уменьшает использование ЦП. если вы уступите, но планировщик не имеет других потоков для планирования на этом процессоре, он просто перенести ваш поток сразу, тем самым дросселируя процессор. – sbabbi
@sbabbi Вы правы. Наверное, я просто не понимаю проблему. Если ни один другой поток не готов к запуску, я хочу использовать максимальный процессор для выполнения моей задачи (меня не волнует интенсивность процессора). Однако, если моя задача заключается в том, чтобы затормозить процессор и не дать другим потокам отвечать/работать плавно, я бы хотел уступить. – user5976242