2015-03-19 1 views
1

Можно ли сделать SetTimer() только отправить сообщение WM_TIMER, а не отправлять новое сообщение каждый раз, когда истекает указанное время? В настоящее время я использую KillTimer(), когда я получаю сообщение WM_TIMER, чтобы остановить таймер. Должен ли я продолжать это делать или есть другой способ указать это автоматически?Как заставить SetTimer() отправлять только одно сообщение WM_TIMER?

+0

Легко - не вызывайте Applcation.DoEvents. –

+2

@MartinJames ... вы уверены, что это было предназначено для этого вопроса? Это вопрос C о необработанных функциях Windows API, а не о вопросе .net, и даже тогда прекращение всех событий приложений не является ответом; вполне вероятно, что этот человек делает реальную программу GUI и просто хочет убить свой временный таймер, а не останавливать все GUI все – andlabs

ответ

2

SetTimer() создает только периодический таймер. Единственный способ сделать это одноразовым таймером - убить таймер в первом сообщении WM_TIMER, как вы уже это делали.

В противном случае измените логику таймера, чтобы вместо этого вы могли использовать CreateWaitableTimer() или timeSetEvent(), оба из которых могут создать настоящий таймер с одним выстрелом.

3

Нет, SetTimer всегда повторяется. Просто убейте его в своем обработчике WM_TIMER, чтобы остановить его отправку другого.

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