Что нового

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

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,665
Репутация
2,463
Поставить в цикл паузу, хотя бы в секунду.
 
Автор
F

Foxik

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


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

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

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,665
Репутация
2,463
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
как вариант убрать проверку секунд. такая точность, ИМХО, ни к чему
 
Верх