Задать вопрос
kamilgarey
@kamilgarey

While(true) или Timeout

Сам писал, и в коде других встречал следующую конструкцию для периодического запуска обработчиков:

while(true){ ... Thread.Sleep(время); }

вместо использования TimeOut. (Ну и как правило в предикате всё-же стоит булева переменная, что-то вроде stop, но это сути не меняет.)

Есть ли здесь какие-либо «подводные камни»? Понятно что есть сдвиг по времени (так коду нужно некоторое время на выполнение, поэтому точное время промежутков между исполнения, как по таймеру не получим).
Какие-нибудь ещё отличия?
  • Вопрос задан
  • 3460 просмотров
Подписаться 3 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
@mayorovp
Если время больше int.MaxValue / 4, то поток имеет все шансы так и не проснуться. Не уверен, является ли это подводным камнем, но лично я однажды на это напоролся.

Кроме того, при фиксированных промежутках реальная частота может очень сильно просесть на загруженной системе.

Ну и тот факт, что такой код занимает целый поток, игнорировать не стоит.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы