Что нового

Комманда остановки выполнения программы в любом месте кода

notconnected

Новичок
Сообщения
8
Репутация
0
Здравствуйте, подскажите, пожалуйста, как заставить программу перестать выполняться в любой момент, но при этом что бы не закрылось окно программы.
Есть цикл опроса формы, внутри цикла есть вложенный цикл с действиями, он висит в CASE - нажатие кнопки старт, как сделать кнопку стоп, что бы она могла прервать вложенный цикл.

Код:
While 1
	Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE ; Выход из программы
            Exit
		Case $CTRL_btn1 ; Основные действия программы
			For $i=1 To $total
                               ;много действий, вот если в этот момент нужно прервать выполнение по клику на кнопку, а еще лучше прервать в любой момент
			Next
    EndSwitch
WEnd


Соответственно опрос формы внутри вложенного цикла приостановлен и нажатия на кнопки не опознаются
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
notconnected,
Можно, например, сделать примерно так.
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>

Global $iNotWork, $hGUI, $idBtnStart, $idBtnStop

$hGUI = GUICreate('Test', 200, 120)
$idBtnStart = GUICtrlCreateButton('Start', 50, 20, 100, 30)
$idBtnStop = GUICtrlCreateButton('Stop', 50, 70, 100, 30)
GUISetState()
GUIRegisterMsg($WM_COMMAND, '_WM_COMMAND')

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $idBtnStart
			ConsoleWrite('Start' & @LF)
			$iNotWork = 0
			For $i = 1 To Random(100, 1000, 1)
				ConsoleWrite($i & @LF)
				Sleep(Random(50, 150, 1))
				If $iNotWork Then ExitLoop
			Next
			ConsoleWrite('Stop' & @LF)
	EndSwitch
WEnd

Func _WM_COMMAND($h_Wnd, $i_Msg, $i_wParam, $i_lParam)
	Switch $h_Wnd
		Case $hGUI
			Switch BitAND($i_wParam, 0xFFFF)
				Case $idBtnStop
					Switch BitShift($i_wParam, 16)
						Case $BN_CLICKED
							$iNotWork = 1
					EndSwitch
			EndSwitch
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>_WM_COMMAND
OffTopic:
joiner [?]
видимо поиск по форуму уже не в моде?
Мне проще написать, чем искать. :smile:
 
Автор
notconnected

notconnected

Новичок
Сообщения
8
Репутация
0
madmasles сказал(а):
notconnected,
Можно, например, сделать примерно так.
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>

Global $iNotWork, $hGUI, $idBtnStart, $idBtnStop

$hGUI = GUICreate('Test', 200, 120)
$idBtnStart = GUICtrlCreateButton('Start', 50, 20, 100, 30)
$idBtnStop = GUICtrlCreateButton('Stop', 50, 70, 100, 30)
GUISetState()
GUIRegisterMsg($WM_COMMAND, '_WM_COMMAND')

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $idBtnStart
			ConsoleWrite('Start' & @LF)
			$iNotWork = 0
			For $i = 1 To Random(100, 1000, 1)
				ConsoleWrite($i & @LF)
				Sleep(Random(50, 150, 1))
				If $iNotWork Then ExitLoop
			Next
			ConsoleWrite('Stop' & @LF)
	EndSwitch
WEnd

Func _WM_COMMAND($h_Wnd, $i_Msg, $i_wParam, $i_lParam)
	Switch $h_Wnd
		Case $hGUI
			Switch BitAND($i_wParam, 0xFFFF)
				Case $idBtnStop
					Switch BitShift($i_wParam, 16)
						Case $BN_CLICKED
							$iNotWork = 1
					EndSwitch
			EndSwitch
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>_WM_COMMAND
OffTopic:
joiner [?]
видимо поиск по форуму уже не в моде?
Мне проще написать, чем искать. :smile:

Спасибо!
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
OffTopic:
madmasles [?]
Мне проще написать, чем искать
но не автору темы. да и в поиске ничего сложного. "нажми на кнопку, получишь результат..."
переписывать каждый раз один и тот же код - это потворство лени новичков. пусть, хотя бы, научатся искать
 
Верх