Что нового

остановка функции при условии.

yukuru

Влюбленный Бродячий Кот
Сообщения
48
Репутация
4
в коде вызываем функцию, которая будет работать постоянно(через каждый 3 минуты)

Код:
 AdlibEnable("Timetosleep",180000)

в этой функции есть переменная. например

Код:
global $i=0

func Timetosleep()
$i+=1

endfunc

паралельно это функции в "главном" коде программа выполняется какаято другая функция(не столь важно. какаято случайная. пусть будет что в данный момент выполнялась ф-ция с названием argo() ).

Вопрос: как сделать чтобы при достижении скажем $i=5(через 15минут) мы останавливали функцию argo() в "главном" коде, а при $i=6(спустя три минуты после паузы) снова ее возобновляли.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Проверять в argo() переменную $i и если она соответствует нужному значению приостанавливать функцию argo()
Если хотите получить код, то приведите свой ;)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Код:
$iCount = 0
HotKeySet('{Esc}', '_Exit')

AdlibRegister('_SomeFunc')
AdlibRegister('_Count', 5000)
While 1
	Sleep(50)
WEnd

Func _SomeFunc()
	ToolTip('$iCount: ' & $iCount & @LF & 'Random: ' & Random(1, 1000), 0, 0)
EndFunc   ;==>_SomeFunc

Func _Count()
	$iCount += 1
	If $iCount = 5 Then AdlibUnRegister('_SomeFunc')
	If $iCount = 6 Then AdlibRegister('_SomeFunc')
EndFunc   ;==>_Count

Func _Exit()
	Exit
EndFunc   ;==>_Exit
 
Автор
Y

yukuru

Влюбленный Бродячий Кот
Сообщения
48
Репутация
4
спасибо большое. реализация понравилась.

только у меня в справке на русском не описаны "AdlibUnRegister" и "AdlibRegister"

можно в двух словах обЪяснить их назначение. по логике понятно, но хочется быть уверенным.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
madmasles
А если функция _SomeFunc выполняется в общем, цикле?
yukuru [?]
как сделать чтобы при достижении скажем $i=5(через 15минут) мы останавливали функцию argo() в "главном" коде
Вот и я говорю, что грамотное изложение своих мыслей не есть второстепенная задача!
Благо, что вы уже овладели навыками телепатии ;D
 
Автор
Y

yukuru

Влюбленный Бродячий Кот
Сообщения
48
Репутация
4
Garrett

нет, вы обсолютно правы. мне необходимо реализация, когда функция выполняется в общем цикле. Мало того...неизвестно КАКАЯ функция,(т.к. в данном случае было заведомо известно какую функцию тормозить)

Просто....из любой ситуации можно найти выход..."Когда нельзя сделать калькулятор -можно реализовать счеты"
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
yukuru [?]
Просто....из любой ситуации можно найти выход
Абсолютно верно, даже когда человек уходит в мир иной, ему дают два выхода! ;D
Но, нужны данные, отчего можно оттолкнуться. Если неизвестно какую функцию нужно тормозить, то должны быть другие параметры, по которым можно ориентироваться.
"Когда нельзя сделать калькулятор -можно реализовать счеты"
Да, но мы знаем, что в одном случае мы нажимаем кнопочки, а в другом перекидываем косточки. А тут мы не знаем, какие данные выдаёт функция (в чём её смысл), и как её звать :smile:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Garrett [?]
А если функция _SomeFunc выполняется в общем, цикле?
Наверное, как-то так :smile:
Код:
$iCount = 1
HotKeySet('{Esc}', '_Exit')

AdlibRegister('_Count', 5000)
$iStart = TimerInit()
While 1
	If TimerDiff($iStart) > 250 Then
		If Mod($iCount, 5) Then
			_SomeFunc()
		Else
			ToolTip('$iCount: ' & $iCount & @LF & 'Перекур :)', 0, 0)
		EndIf
		$iStart = TimerInit()
	EndIf
	Sleep(50)
WEnd

Func _SomeFunc()
	ToolTip('$iCount: ' & $iCount & @LF & 'Random: ' & Random(1, 1000), 0, 0)
EndFunc   ;==>_SomeFunc

Func _Count()
	$iCount += 1
EndFunc   ;==>_Count

Func _Exit()
	Exit
EndFunc   ;==>_Exit

yukuru [?]
можно в двух словах обЪяснить их назначение
Примерно то же, что в Вашей справке AdlibEnable() и AdlibDisable(), то я Вам рекомендую перейти на последнюю справку, т.к. в Вашей очень многое устарело.
 
Автор
Y

yukuru

Влюбленный Бродячий Кот
Сообщения
48
Репутация
4
простите код не хочу выкладывать. Секрет разработчика ;)

если интересно для чего это мне- могу сказать что:
Одна функция отвечала за движение. Вторая за Атаку.
тобишь требовалось что...ТЕЛО движется. как только обнаруживается враг,- функция на движение останавливается(запоминаня тот момент где оно работало и с какими данными вело дело) и происходит функция на АТАКУ. после окончания функции на атаку, продолжает работу функция движения с того места где встали на паузу.

я вас загрузил?))
 
Верх