2015-12-17 6 views
0

В одном из моих проектов мне нужно эффективно планировать различные операции, которые нужно выполнять много раз, каждая операция имеет свой собственный временной интервал.Работает ли функция SetTimer в фоновом режиме или идет спать?

Мне было интересно, когда я использую функцию SetTimer, что происходит в фоновом режиме?

Создана новая тема? Работает ли он на заднем плане и ест мой процессор? Или он спит до тех пор, пока ОС не пробудит его, когда придет время? Можно ли иметь большое количество таймеров или есть веская причина попытаться свести к минимуму их количество?

Спасибо.

+0

SetTimer не создает новый поток. Что происходит, зависит от использования timerproc (последний параметр) или нет. – Jerome

+0

не могли бы вы объяснить или перенаправить нас любопытных программистов куда-нибудь с объяснением того, что именно происходит там и как? –

+0

Это было бы слишком широко, охватывая планирование ОС, дельта-очереди, объекты таймера, очереди сообщений Windows, сборку сообщений WM_TIMER и т. Д. Для получения более подробной информации вам следует обратиться к одной из хороших книг Windows Internals. –

ответ

2

Создана новая тема?

No.

ли запустить его в фоновом режиме и ест мой процессор?

Нет - попробуйте. установить таймер и проверить Диспетчер задач.

ли он спать до тех пор, пока ОС не пробудит его, когда придет время?

Да.

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

С современными системами много таймеров не совсем огромными накладными расходов, но вы должны тщательно подумать о таком требовании ..

+2

Стоит отметить: если вы укажете обратный вызов 'TimerProc', он будет выполнен в том же потоке, который вызывает' SetTimer'. Следствием этого является то, что вам не нужно защищать данные, которые читаются/записываются в 'TimerProc' против параллельного доступа. – IInspectable

Смежные вопросы