Оптимизация бесконечного цикла

160
09 марта 2018, 15:34

Периодически использую бесконечные циклы в отдельных потоках, например, для постоянного мониторинга новых сообщений. Естественно, простая запись

while(true) {
    test();
} 

отнимает львиную долю мощности процессора (в моём случае 30%). Для решения этой проблемы я после каждого такта цикла даю ему поспать на пару миллисекунд

while(true) {
    test();
    this_thread::sleep_for(chrono::milliseconds(50));
}

Благодаря этому нагрузка снижается до ~0.5% при отсутствие новых сообщений, и до ~8% при пиковой нагрузке.

О такой оптимизации, или о любой другой я не нашел информации вообще (плохо искал, да). Слышал только о оптимизации простеньких игр через

float time = clock.getElapsedTime().asMicroseconds();
clock.restart();
time = time/700;

и последующим умножением time на скорость игры.

Мой вариант со спячкой меня более чем устраивает, но все равно хочу знать

"А можно сделать лучше?"

READ ALSO
Передача константы в функцию С++

Передача константы в функцию С++

Имеем функцию работы с реестром:

180
Числа Фиббоначи в с++ через while [требует правки]

Числа Фиббоначи в с++ через while [требует правки]

Вывести на экран первые n чисел ряда ФибоначчиЦикл с параметром не использовать

149
Регистрация/Авторизация С++ [требует правки]

Регистрация/Авторизация С++ [требует правки]

Регистрация/Авторизация в проекте на C++

110