Устанавливаю таймер на определённое время для вызова сообщения (время вызова сообщения с точностью до минуты) Код (Text): invoke SetTimer,hWnd,10,1000,0 . . . .elseif uMsg==WM_TIMER проверка времени .if eax==0 && timerflag!=1 invoke MessageBox,hwnd,addr msg,addr appname,MB_OK mov timerflag,1 .endif timerflag1 для того, чтобы не вызывать сообщение более одного раза в течении назначеной минуты Проблема в том, что сообщения продолжают вызываться. В чём дело?
Может получается - ИЛИ ? Попробуй : .if eax==0 .if timerflag ==1 ;ничего не делаем .else ;что-то делаем .endif .endif
Прикол этого куска в том, что мессажбокс УЖЕ висит (и не вернется из него, пока юзер не нажмет кнопку), а флаг ЕЩЕ не 1. Поэтому, если оно провисит до следующего тика, то будет еще один мессажбокс, потом еще, еще, еще... этаким косяком, по диагонали. А потом говорят, что винда глючит... )
vg FatMoon все правильно сказал. Пиши на VB - там событие таймера (не АПИшного, а контрола) не возникнет снова до тех пор, пока не отработает процедура его отработки...
Или использовать мультимедиа таймер, в нём можно одноразовое событие инициировать. А этот таймер начинает кидать события в очередь, что для твоего случая не хорошо. Прикол в том, что MessageBox сам обрабатывает сообщения (то есть у него есть цикл сообщений), и он не блокирует обработку других окон. Поэтому как ни странно, когда MessageBox висит, поток может выйти из него(посредством DefWindowProc), но не выйти из процедуры родительского окна и снова выполнить твою процедуру. То есть поток по кругу входит в обработчик WM_TIMER, но до mov timerflag,1 не как не дойдёт, но если нажать хоть один OK, то поток сразу дойдёт до твоего mov timerflag, 1, OOП концепции однако. Лечится ето есно очень просто, переносом mov timerflag,1 до MessageBox, и всё будет OK. Косяков при этом быть не должно даже если обработчик WM_TIMER, запаздает с первым вызовом, так как события WM_TIMER если они не обработаны, склеиваются. Но события всё равно будут кидаться, что не есть хороший стиль программирования, лучше юзать однособытийный мультимедия таймер.