Что нового

Выход и прерывание цикла по таймеру

kermzy

Новичок
Сообщения
8
Репутация
0
Добрый день. Прошу помощи в решении одной проблемы, появившейся, скорее всего потому что я еще новичок.) Усердное изучение учебника и поиск не дало своих плодов, поэтому, если кого-то раздражу примитивным вопросом, прошу сразу извинить) Суть проблемы такова: есть программа, код которой, по сути, большой повторяющийся "н" раз цикл. Есть таймер. Необходимо по истечении определенного времени(к примеру 10 минут) прервать выполнение всего большого цикла(на какой бы стадии он не выполнялся), и начать выполнение определенной функции. Проблема в том, что я не знаю, что именно будет выполнятся в момент окончания таймера. Предполагаю, что пихать повсюду условие, "не закончился ли таймер" не самое рациональное решение. Подозреваю, что есть какое то условие, которое позволяет сразу же все прервать и выполнять указанное действие, наподобие "HotKeySet".
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
kermzy
Код:
HotKeySet('{Esc}', '_Exit')
$fMy = True
$i = 0
$j = 100
AdlibRegister('_MyFunc', 5000)
While $fMy
	$i += 1
	ToolTip('$i: ' & $i, 0, 0)
	Sleep(500)
	While Not $fMy
		$j += 100
		ToolTip('$j: ' & $j, 0, 0)
		Sleep(500)
	WEnd
WEnd

Func _MyFunc()
	$fMy = Not $fMy
EndFunc   ;==>_MyFunc

Func _Exit()
	Exit
EndFunc   ;==>_Exit
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
kermzy [?]
Подозреваю, что есть какое то условие, которое позволяет сразу же все прервать и выполнять указанное действие, наподобие "HotKeySet".
Нету....А вот варианты есть всегда, например:
Родителський скрипт запускает таймер и запускает другой файл (который и выполняет большущий цикл). Когда таймер закончится, родителський скрипт просто завершит процесс файла с циклом.

В противном случае, "пихать повсюду условие". Хотя будет достаточно просто проверять переменную "флаг" на 1/0. И если 0, то выйти из цикла.
 
Автор
K

kermzy

Новичок
Сообщения
8
Репутация
0
Все, теперь разобрался! Огромное спасибо madmasles' у, с использованием AdlibRegister добился того, чего хотел)

2`p r o x y: Думал о варианте со вторым файлом, но AdlibRegister гораздо меньше путаницы.. А любом случае спасибо)

Еще если кому будет интересно.. вот примерный скелет той программы :


Код:
AdlibRegister("perebor", 500)

For $a = 5 to 1 Step -1
			
	$begin = TimerInit()	
	ToolTip($a, 0, 0)
	sleep(Random(1000,3000))	
		
Next
	
Func perebor ()
	
	$rez = TimerDiff($begin)	
	
	if $rez > 2000 then 
		
		Call("zapusk")		
			
	EndIf
		
EndFunc

Func zapusk()
	
	ToolTip("Время вышло", 0, 0)
	sleep(2000)
	exit
	
EndFunc


Тему думаю можно закрывать. Еще раз спасибо за ответы!
 

mashino

Новичок
Сообщения
21
Репутация
0
Привет. Если кто знает ,скажите
можно ли каким-либо образом определять значение 500
AdlibRegister("perebor", 500)
не в коде программы,а считывать из GUI формы?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
mashino,
Предупреждение За нарушение общих правил (пункт В.4):
Не лепите несколько вопросов разной тематики в один пост. По типу "Ребят, а ещё такой вопрос...". Каждый вопрос в свою тему.


С уважением, ваш Модератор.
 
Верх