Что нового

запуск в определенное время

Foxik

Новичок
Сообщения
15
Репутация
0
Сделал запуск в определенное время. Сравнение времени через цикл. Все работает,но есть одно "НО". Сильно жрет ресурсы ЦП. Как оптимизировать код, что бы такого не было?

Код:
While 1
RunR("12:00")
WEnd
Func RunR($rr)
	If StringToBinary(RegRead("HKEY_...\", "Run")) = 0 then
	RegWrite("HKEY_...", "Run", "REG_SZ", @YEAR & '/' & @MON & '/' & @MDAY & " 00:00:00")
	EndIf
$run = _DateDiff('n', @YEAR & '/' & @MON & '/' & @MDAY & ' ' & $rr & ':00',_NowCalc())

	Select
	Case $run = 0
		If _DateDiff('n', RegRead("HKEY_...", "Run"),_NowCalc()) = 0 Then
			Return 2
		Else
			;что выполнить
			Return 0
		EndIf
	Case $run < 0
		Return 0
	Case $run > 0
		Return 1
	EndSelect
EndFunc
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 278
Репутация
2 353
Поставить в цикл паузу, хотя бы в секунду.
 
Автор
F

Foxik

Новичок
Сообщения
15
Репутация
0
CreatoR сказал(а):
Поставить в цикл паузу, хотя бы в секунду.

Не могу, т.к. в этом цикле у меня еще
Код:
$msg = TrayGetMsg()
...

меню управляющего элемента в системной панели.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 278
Репутация
2 353
Foxik [?]
в этом цикле у меня еще
Который устанавливает паузу в 10 мс - обычно этого должно хватить, но я бы посоветовал использовать режим TrayOnEvent и всё же поставить паузу.
 
Автор
F

Foxik

Новичок
Сообщения
15
Репутация
0
Добавил паузу (Sleep) в 100 мс, загрузка ЦП уменьшилась в 5 раз :ok:

А потом решил по экспериментировать, и добавил:

Код:
$i=1
While 1
RunR("12:00")
WEnd
Func RunR($rr)
	 If $i=1000 Then
 ;прежняя функция
         If StringToBinary(RegRead("HKEY_...\", "Run")) = 0 then
                ...
         EndSelect
 ;/прежняя функция
         $i=1
	 Else
		 $i=$i+1
	 EndIf
EndFunc


эффект потрясающий, почти в 10 раз :laugh:


З.Ы. CreatoR thanks for idea
 

AllWay

Знающий
Сообщения
16
Репутация
9
Foxik сказал(а):
Сделал запуск в определенное время. Сравнение времени через цикл. Все работает,но есть одно "НО". Сильно жрет ресурсы ЦП. Как оптимизировать код, что бы такого не было?

Код:
While 1
RunR("12:00") ;В этой строке надо менять дату?
WEnd
Func RunR($rr)
	If StringToBinary(RegRead("HKEY_...\", "Run")) = 0 then ; "HKEY_...\" это ошибка или так и должно быть?
	RegWrite("HKEY_...", "Run", "REG_SZ", @YEAR & '/' & @MON & '/' & @MDAY & " 00:00:00")
	EndIf
$run = _DateDiff('n', @YEAR & '/' & @MON & '/' & @MDAY & ' ' & $rr & ':00',_NowCalc())

	Select
	Case $run = 0
		If _DateDiff('n', RegRead("HKEY_...", "Run"),_NowCalc()) = 0 Then
			Return 2
		Else
			;что выполнить
			Return 0
		EndIf
	Case $run < 0
		Return 0
	Case $run > 0
		Return 1
	EndSelect
EndFunc
Пробовал запустить выложенный скрипт и возник сразу вопрос, нужно ли в начале скрипта ставить #include <Date.au3> и в каком поле менять значение времени? И еще вопрос, почему ключ "HKEY_...\" в выложенном скрипте не полный? В данном виде не работает скрипт, поправьте пожалуйста до рабочего состояния...



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


Код:
While 1
	Select
		Case @HOUR=19 AND @MIN=40 ; AND @SEC=00 (согласен, такая точность ни к чему - убрал) Установить нужное время (в данном случае 19:40)
			Run("Ваша программа.exe", "c:\") ;Запустить программу
			ExitLoop ;Прервать цикл
	EndSelect	
	Sleep(10000) ; Пауза 10секунд
WEnd

Нарыл и слепил вот такой РАБОЧИЙ вариант. Может подскажите более красивое решение?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
как вариант убрать проверку секунд. такая точность, ИМХО, ни к чему
 
Верх