Что нового

не закрывается окно из -за sleep

Loonka

Новичок
Сообщения
3
Репутация
0
Добрый день, нужна помощь, запарился уже.
Суть - мой скрипт должен опрашивать некий файл (реализовано в Cycle() и успешно справляется) раз в 15 секунд и выводить изменения в GUI. Но я столкнулся с проблемой, при ожидании тех самых 15 секунд для повторного выполнения Cycle(), окно GUI нельзя закрыть - только убить процесс, что не комильфо...
Код:
Func Cycle2()
IF $GUI_EVENT_CLOSE = 1 Then Exit 0 ElseIf $wite = 300 Then
   $wite = 0
   Cycle()
   ElseIf $wite > 300 Then
   Sleep(50)
   $wite + 1
   Cycle2()
EndIf
EndFunc


Пробовал и так:

Код:
While 1
        Switch GUIGetMsg()
            Case $wite <300
				Sleep(50)
				$wite +1
			Case $GUI_EVENT_CLOSE
                ExitLoop
			Case $wite = 300
				$wite = 0
				Cycle()
        EndSwitch
	 WEnd
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Код:
GUIRegisterMsg($WM_SYSCOMMAND, "WM_SYSCOMMAND")

регистрируем функцию после создания окна
сама функция
Код:
Func WM_SYSCOMMAND($hWnd, $Msg, $wParam, $lParam)
	Local $nID = BitAND($wParam, 0xFFFF)
	Switch $nID
		Case 0xF060
			Exit
	EndSwitch
	Return 'GUI_RUNDEFMSG'
EndFunc   ;==>WM_SYSCOMMAND
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
куда еще проще.
как можно узнать, что была нажата системная кнопка "Закрыть"?
только через опрос события
 
Автор
L

Loonka

Новичок
Сообщения
3
Репутация
0
Так ?
Код:
Func WM_SYSCOMMAND($hWnd, $Msg, $wParam, $lParam)
    Local $nID = BitAND($wParam, 0xFFFF)
    Switch $nID
        Case 0xF060
            Exit
		  Case $wite <300
                Sleep(50)
                $wite +1
		  Case $wite = 300
                $wite = 0
                Cycle()
    EndSwitch
    Return 'GUI_RUNDEFMSG'
EndFunc   ;==>WM_SYSCOMMAND
 

hedji

Продвинутый
Сообщения
409
Репутация
94
Код:
$timestart = TimerInit()
While 1
        Switch GUIGetMsg()            
            Case $GUI_EVENT_CLOSE
                ExitLoop            
        EndSwitch
        If TimerDiff($timestart)>15000 Then
                ;опросить файл на изменение
                $timestart = TimerInit()
        Endif
WEnd
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Loonka [?]
не совсем
вот это
Код:
Case $wite <300
                Sleep(50)
                $wite +1
          Case $wite = 300
                $wite = 0
                Cycle()

как раз в основном цикле пусть и остается
 
Верх