2016-03-23 8 views
0

У меня есть поток, который работает в цикле и выполняет задачи.Как я могу сделать это менее интенсивным?

outTask::Task* task; 
while (!m_out_stop) { 
    println("abc"); 
    while (m_outQueue.pop(task)) { 
     println("123"); 
     task->execute(); 
    } 
} 

Как я могу сделать это менее интенсивным? Я мог бы заставить поток спать между каждой задачей, но это может вызвать задержку и, следовательно, не является идеальным решением.

Ps. Заявления для печати предназначены для целей отладки.

+0

с усилением вы могли бы использовать повышение :: this_thread :: выход() , withh C++ 11 можно использовать std :: this_thread :: yield() – user5976242

+0

@ user5976242 По крайней мере, в окнах 'yield' не уменьшает использование ЦП. если вы уступите, но планировщик не имеет других потоков для планирования на этом процессоре, он просто перенести ваш поток сразу, тем самым дросселируя процессор. – sbabbi

+0

@sbabbi Вы правы. Наверное, я просто не понимаю проблему. Если ни один другой поток не готов к запуску, я хочу использовать максимальный процессор для выполнения моей задачи (меня не волнует интенсивность процессора). Однако, если моя задача заключается в том, чтобы затормозить процессор и не дать другим потокам отвечать/работать плавно, я бы хотел уступить. – user5976242

ответ

0

Если вы работаете в окнах можно использовать SetThreadPriority:

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

Это делает запуск медленную рабочую нить, но не остановить его

+0

Спасибо. Это кросс-платформа? – KaareZ

+0

Нет, я говорю вам в своем ответе («Если вы работаете в окнах») –

+0

Сорри, пропустил это. Виноват – KaareZ