Что нового

Одновременная остановка и запуск двух работающих скриптов

gerkuless

Новичок
Сообщения
12
Репутация
0
Добрый день! Подскажите, каким образом можно ставить на паузу и снова запускать два одновременно работающих скрипта?
Работа с одним понятна:
Код:
$paused = false
HotKeySet("{F11}", "Pause")
Func Pause()
	$Paused = NOT $Paused
	While $Paused
		Sleep(100)
	WEnd
Оба скрипта обрабатывают бесконечный цикл While, поэтому в один скрипт не засунуть.
 

hedji

Продвинутый
Сообщения
409
Репутация
94
- забидить паузу на разные кнопки для разных скриптов.
- если оба скрипта с бесконечными циклами, почему не засунуть все в один скрипт и один цикл?
 
Автор
G

gerkuless

Новичок
Сообщения
12
Репутация
0
hedji сказал(а):
- забидить паузу на разные кнопки для разных скриптов.
- если оба скрипта с бесконечными циклами, почему не засунуть все в один скрипт и один цикл?
1) На разные получается, но требуется одновременная остановка одной кнопкой. Хотел сделать следующим образом, но не получается:
Один останавливается на F10, второй F11. Запустить 3 скрипт (или в один из двух) который по F9 нажимает F10иF11.
Код:
HotKeySet("{F9}", "STOP")
Func STOP()
Send("{F10}")
Send("{F11}")
EndFunc

2)Один из циклов предусматривает паузы, в то время как второй должен постоянно выполняться.
 

hedji

Продвинутый
Сообщения
409
Репутация
94
скомпилировал 3 скрипта, у меня работает:
первый
Код:
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 350, 125, 192, 114)
$Label1 = GUICtrlCreateLabel("Label1", 24, 40, 292, 49)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
$x = 0

$paused = false
HotKeySet("{F11}", "Pause")
Func Pause()
	$Paused = NOT $Paused
	While $Paused
		Sleep(100)
	WEnd
EndFunc

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

	EndSwitch
	GUICtrlSetData($Label1, $x)
	$x += 1
	Sleep(100)
WEnd


второй:
Код:
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 350, 125, 192, 114)
$Label1 = GUICtrlCreateLabel("Label1", 24, 40, 292, 49)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
$x = 0

$paused = false
HotKeySet("{F10}", "Pause")
Func Pause()
	$Paused = NOT $Paused
	While $Paused
		Sleep(100)
	WEnd
EndFunc

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

	EndSwitch
	GUICtrlSetData($Label1, $x)
	$x += 1
	Sleep(100)
WEnd


третий:
Код:
HotKeySet("{F9}", "STOP")
Func STOP()
Send("{F10}")
Send("{F11}")
EndFunc

While 1
	Sleep(100)
WEnd
 
Автор
G

gerkuless

Новичок
Сообщения
12
Репутация
0
Спасибо. Через 3 действительно работает. Интересно почему если вставить код в один из двух, то не срабатывает(останавливается только один).
 

hedji

Продвинутый
Сообщения
409
Репутация
94
Если вставлять в один из двух, тогда.
в первом:
Код:
$paused = false
HotKeySet("p", "Pause")
Func Pause()
	Send("o")
    $Paused = NOT $Paused

    While $Paused
        Sleep(100)
    WEnd
EndFunc


во втором:
Код:
$paused = false
HotKeySet("o", "Pause")
Func Pause()
    $Paused = NOT $Paused
    While $Paused
        Sleep(100)
    WEnd
EndFunc
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
если я правильно понял, то нужно останавливать два и более разных процесса(кода)

я бы сделал так
Код:
#RequireAdmin
#include <WinAPIEx.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $stData
Local $JMPPR = _WinAPI_OpenFileMapping('openfile')
If $JMPPR Then
	Local $RJMP = _WinAPI_MapViewOfFile($JMPPR)
	$stData = DllStructCreate('wchar[2]', $RJMP)
Else
	Local $CJMF = _WinAPI_CreateFileMapping(-1, 10, 'openfile')
	Local $RJMP = _WinAPI_MapViewOfFile($CJMF)
	$stData = DllStructCreate('wchar[2]', $RJMP)
EndIf
Local $Form1 = GUICreate("Form1", 355, 119, 192, 124)
Global $Label1 = GUICtrlCreateLabel("Working", 40, 32, 148, 17)
Global $Button1 = GUICtrlCreateButton("Button1", 208, 72, 75, 25)
GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')

While 1
	If DllStructGetData($stData, 1) Then
		GUICtrlSetData($Label1, 'Pause')
		While 1
			Sleep(10)
			If Not DllStructGetData($stData, 1) Then
				GUICtrlSetData($Label1, 'Working')
				ExitLoop
			EndIf
		WEnd
	EndIf
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd

Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
	Local $nNotifyCode = BitShift($wParam, 16)
	Local $nID = BitAND($wParam, 0xFFFF)
	Switch $nNotifyCode
		Case 0
			Switch $nID
				Case $Button1
					If Not DllStructGetData($stData, 1) Then
						DllStructSetData($stData, 1, '1')
					Else
						DllStructSetData($stData, 1, '')
					EndIf
			EndSwitch
	EndSwitch
	Return 'GUI_RUNDEFMSG'
EndFunc   ;==>WM_COMMAND
я добавил запуск с правами админа, чтобы можно было запустить прямо из редактора несколько раз один код(autoit 3.3.12.0)
наполняемость скриптов может быть разной, суть в их общении друг с другом через общий виртуальный файл
 
Верх