Что нового

Отключение чтения функции на то время пока в ней работает Sleep

kolosov

Новичок
Сообщения
137
Репутация
0
Ребят. Токая проблема.
Хочу чтобы если в функции сработал Sleep то эту функцию скрипт пропускал.
Тоесть если в функции Start написановот так

Код:
func _Start()
while 1
 If GUICtrlRead($sobiratCheck2)=1 Then sobira()
 If GUICtrlRead($sobiratCheck3)=1 Then sobira2()
wend
endfunc

И если в первой сработал Sleep то работала только вторая.
Тоесть первую бы пока не читало.

Пробовал сделать так
Код:
$time = 0
Func sobira()
$timer = 0 then
PixelSearch( $Button2 [0] + $PixelLeft [0] ,$Button2 [1] + $PixelLeft [1] , $Button2 [0] + $PixelRight [0], $Button2 [1] + $PixelRight [1] , 0xF9FE88,1)
If Not @error Then
   MsgBox(0,'','.',5)
   Sleep( Int(GUICtrlRead($Res)) *60*1000) = $timer = 1
   MsgBox(0,'','.',5)
   EndIf


()EndFunc

Но чтото не работает.
Такое пробую в первые вот и не удача.
Понадеюсь на Вас.
 

_ToBe_

Осваивающий
Сообщения
142
Репутация
35
а ты точно правильно скопировал код???
что значит строка
Код:
$timer = 0 then
???
может имелось ввиду
Код:
If $timer = 0 then
тогда перед Endfunc должен быть ещё одни EndIf

И что означают пустые круглые скобки перед Endfunc?
Код:
()EndFunc
 
Автор
K

kolosov

Новичок
Сообщения
137
Репутация
0
Ага забыл вписать
Код:
if

А скобки это я лажанулся зачемто их вписал =) :IL_AutoIt_1:
 

_ToBe_

Осваивающий
Сообщения
142
Репутация
35
Ну а теперь то всё работает??? :scratch:
 

DeLeTeSHift

Знающий
Сообщения
46
Репутация
9
Код:
Global $stopfunc1  = 0
Global $stopfunc2  = 0
 
Func _Start()
While 1
sobira1()
sobira2()
wend
Endfunc

Func sobira1()
For $i = 1 To 1
If $stopfunc1  == 1 Then
   ExitLoop 
EndIf
PixelSearch( $Button2 [0] + $PixelLeft [0] ,$Button2 [1] + $PixelLeft [1] , $Button2 [0] + $PixelRight [0], $Button2 [1] + $PixelRight [1] , 0xF9FE88,1)
If Not @error Then
   MsgBox(0,'','.',5)
   Sleep( Int(GUICtrlRead($Res)) *60*1000) = $timer = 1
   MsgBox(0,'','.',5)
   $stopfunc1  = 1
EndIf
Next   
EndFunc

Func sobira2()
   ; Аналогично
EndFunc
 
Автор
K

kolosov

Новичок
Сообщения
137
Репутация
0
Скажите мне тогда в скрипте нужно убрать
И зтой строчки
Код:
Sleep( Int(GUICtrlRead($Res)) *60*1000) = $timer = 1

Убрать вот это?
Код:
$timer = 1

А вообще спасибо. Буду пробовать.


Добавлено:
Сообщение автоматически объединено:

И что-то не могу понять как это работает.. Если Вас не затруднит не могли бы Вы расписать комментарии.
 

DeLeTeSHift

Знающий
Сообщения
46
Репутация
9
Вот твоя функция целиком + коменты
Код:
Global $stopfunc1  = 0
Global $stopfunc2  = 0
 
Func _Start()
While 1
If GUICtrlRead($sobiratCheck2)==1 Then sobira1()
If GUICtrlRead($sobiratCheck3)==1 Then sobira2()
wend
Endfunc

Func sobira1()
For $i = 1 To 1 ; вся функция в цикле для того, чтобы можно было её пропускать ExitLoop'ом
If $stopfunc1  == 1 Then ; если остановка функции активна, то выходим из цикла(а так как после цикла нечиго нет, то и из функции)
   ExitLoop 
EndIf
PixelSearch( $Button2 [0] + $PixelLeft [0] ,$Button2 [1] + $PixelLeft [1] , $Button2 [0] + $PixelRight [0], $Button2 [1] + $PixelRight [1] , 0xF9FE88,1)
If Not @error Then ; если нашли пиксель, делаем что надо...
   MsgBox(0,'','.',5)
   Sleep( Int(GUICtrlRead($Res)) *60*1000) = $timer = 1 ;( если нада функция типо этой, но чтоб скрипт продолжал работать, воспользуйся библиотекой Timers.au3)
   MsgBox(0,'','.',5)
   $stopfunc1  = 1 ; ... и ставим остановку функции на 1 (теперь функция будет пропускаться)
EndIf
Next   
EndFunc

Func sobira2()
   ; Аналагично
EndFunc
 
Верх