2016-09-15 3 views
1

У меня есть SetTimers, указывающий на несколько ярлыков, но они перестают работать, когда у меня есть WinWait на одной из ярлыков.Как использовать WinWait на нескольких ярлыках, не блокируя другие?

SetTimer, MyLoop, -5 
SetTimer, MyLabel, -1000 
Return 

MyLoop: 
    SoundBeep, 700 
    SetTimer, MyLoop, -5 
Return 

MyLabel: 
    SoundBeep, 300 
    WinWait, Notepad 
    SetTimer, MyLabel, -1000 
Return 

MyLoop перестает работать, как только MyLabel достигает секции WinWait. Как мне сделать MyLoop дальше, пока MyLabel ждет WinWait самостоятельно?

+0

Проверьте, существует ли окно в цикле с 'sleep 20' внутри. – wOxxOm

ответ

0

Пожалуйста, обратитесь к документации: Threads, SetTimer, WinWait

i := 0 
settimer, afterTenMsg, 1000 ; Start our timer! 
GoSub, WaitForNotepad 
ExitApp 

WaitForNotepad: 
    WinWait, Untitled - Notepad ; This Thread is interupted by the Timer. 
    MsgBox % "Yeah NotePad Opened!" ; Close this will return to line 3 
return 

afterTenMsg: 
    i++ 
    if (i == 10) { 
     settimer, afterTenMsg, off 
     run, notepad.exe 
     settimer, openMsgBox, 1000 ; Interupt MsgBox thread after 1 sec 
    } 
return ; Returns to WinWait 

openMsgBox: 
    settimer, openMsgBox, off 
    MsgBox % "We interupted a MsgBox!" ; close this will return to line 8 
return 

Надеется, что это помогает.

+0

Я хочу использовать 'WinWait' вместо псевдо-цикла, чтобы оптимизировать потребление ресурсов скриптом. – user400424

+0

Я обновил свой пример, используя WinWait, чтобы показать, что его можно прервать с помощью SetTimer. Добавленные комментарии доступны для справки о том, где код будет возвращаться, когда поток будет завершен. Надеюсь, вы сможете лучше понять это. Я действительно предлагаю вам прочитать все три ссылки, которые я разместил, так как я не показывал каждый случай или пример. Например, вы можете определить приоритеты таймеров и даже установить подпрограммы/функции как источники бесперебойного доступа, эта информация содержится в документах. – errorseven