Мой наставник сказал мне, что использование сна в многопоточной программе - это плохая практика.
Я бы оттолкнулся от этого общего утверждения.
AnАльтернативой использованию sleep()
в качестве средства для того, чтобы что-то произошло в определенное время, является отправка задачи в таймер.Если у вас есть поток, который ничего не делает, кроме sleep()
, до определенного времени, а затем что-то происходит, вы можете вместо этого использовать таймер.И, если у потока есть цикл, который заставляет это происходить с периодическими интервалами, то вы можете использовать повторяющееся событие таймера или событие таймера, которое повторно передает себя.
Если выиметь несколько потоков, каждый из которых существует только , чтобы заставить определенную вещь происходить в определенное время, тогда вы могли бы упростить свою программу, используя вместо этого объект таймера.Если ваша программа имеет графический интерфейс пользователя, то вы, вероятно, используете инфраструктуру графического интерфейса, в которой уже есть таймер, который вы можете использовать, поэтому наличие даже одного «временного» потока, вероятно, приводит к бесполезному расходу ресурсов.
Но когда вы говоритео потоках вы говорите об архитектуре вашей программы, а когда вы говорите о sleep()
, вы говорите о деталях реализации низкого уровня.Я автоматически с подозрением отношусь к любому жесткому правилу программирования, сочетающему идеи столь разных уровней дизайна.
Если у меня есть веская причина для существования потока в моей программе *, тогдаЯ без колебаний напишу код, который его создаст, и если у меня будет веская причина для одного из моих потоков на sleep()
, **, тогда я без колебаний напишу этот вызов.
* Хорошая причина существования потока - это управление неким состоящим из состояний "процессом", который прогрессирует независимо от других "процессов", происходящих внутри программы.
** Хорошая причина дляПоток в спящем режиме был бы, если бы была какая-то причина, по которой требовалась пауза между двумя шагами сложного "процесса", которым управляет поток.