Что нового

Организация функций в главном цикле

musicstashall

Знающий
Сообщения
322
Репутация
7
Всем доброго.
У меня в цикле выполняется достаточно много функций, которые естественно нагружают проц. Притормозить цикл нельзя, т.к. вследствии начинают пропускаться события, вообще, желательно в цикле ставить Sleep(1). Поэтому вопрос — нельзяли как-то по таймеру организовать выполнение функций, чтобы функция выполнялась не в каждом проходе цикла, а, например, на десятый проход, сотый, тысячный и тд...? Как это сделать правильно? Я просто поставил перед циклом локальную переменную и в цикле плюсую к ней еденицу, но это теперь доставляет массу неудобств...
 

Malderin

Новичок
Сообщения
68
Репутация
1
Вы, надеюсь, понимаете что Sleep(1) - это задержка 0.001 сек ? Что это за скрипт такой, в котором, например, нельзя поставить Sleep(100), т.е. задержку 0,1 сек, ну или Sleep(50), что, соответственно, равно 0,05 сек.
 
A

Alofa

Гость
musicstashall сказал(а):
... т.к. вследствии начинают пропускаться события...
по ходу речь идет о GUI?

musicstashall сказал(а):
...нельзяли как-то по таймеру организовать выполнение функций...
Код:
AdlibRegister()


musicstashall сказал(а):
... Как это сделать правильно?...
Используйте GUI режим OnEvent. Тем самым вы избавите основной цикл от GUIGetMsg().

OffTopic:
musicstashall по ходу вы хотите составить (а не написать) свой скрипт из отдельных кусков, найденых на форуме, не читая справки? Так вы далеко не уедите.
 

Malderin

Новичок
Сообщения
68
Репутация
1
Функции F1 и F3 выполняются каждый цикл, функция F2 - 1 раз в 10 циклов
Код:
Global $i = 0

While 1
	Sleep(1) ; Очень скоростной скрипт по этому слип 1!
	
	F1()

	If $i = 10 Then
		F2()
		$i = 0
	EndIf

	F3()
WEnd

Func F1()
	;Какая то функция 1
	$i = $i + 1
EndFunc   ;==>F1

Func F2()
	;Какая то функция 2
EndFunc   ;==>F2

Func F3()
	;Какая то функция 3
EndFunc   ;==>F3
 
A

Alofa

Гость
OffTopic:
Malderin сказал(а):
... что Sleep(1) - это задержка 0.001 сек ?...
Код:
$hTimer = TimerInit()
Sleep(1)
MsgBox(0, "Разница во времени", 'Как вы думаете, почему так?' & @CR & 'Sleep(1) = ' & Round(TimerDiff($hTimer))/1000)
 

Malderin

Новичок
Сообщения
68
Репутация
1
Alofa [?]
Как вы думаете, почему так?
Виноват. Посмотрел в справке к Sleep:
Код:
Минимальное 10, даже при установке параметра delay равным 1.
Менее 0,01 быть не может.
 
Автор
M

musicstashall

Знающий
Сообщения
322
Репутация
7
Виноват, так и есть, у меня Sleep(10) стоит, а не Sleep(1), нолик где-то пропал :smile: По всей видимости, я перейду на OnEvent. Спасибо.


Добавлено:
Сообщение автоматически объединено:

Malderin сказал(а):
Функции F1 и F3 выполняются каждый цикл, функция F2 - 1 раз в 10 циклов

Именно так я и пытался организовать :smile:


Добавлено:
Сообщение автоматически объединено:

OffTopic:
Alofa сказал(а):
... по ходу вы хотите составить (а не написать) свой скрипт из отдельных кусков, найденых на форуме, не читая справки? Так вы далеко не уедите.
Вы плохо обо мне думаете, я уже очень далеко заехал, за полгода, изучая AutoIt с самого нуля. Обязательно потом выложу свои твворчества :smile:
 
Верх