Что нового

Скрипт загружает процессор на 90%

Sunnych

Новичок
Сообщения
2
Репутация
0
был скомпилирован "AutoIT компилятор версии 3.3.6.1" на выходе *.exe при работе использовал до 3% процессора, а когда скомпилирован "AutoIT компилятор версии 3.3.8.0" на выходе *.exe при работе использует более 90% процессора.
Сам скрипт:
Код:
#NoTrayIcon
While	1
	if Not ProcessExists('CommFort.exe') Then
		Sleep (3000)
		$i=1
		While $i=1			
			Run('D:\CommFort\CommFort.exe')
			WinWaitActive("Добро пожаловать")
			Send("{DOWN}")
			Send("{Enter}")
			$i=$i-1
		WEnd
	EndIf
WEnd

Подскажите в чем может быть проблема и как с этим бороться так как хочется использовать последнюю версию AutoIT.
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
Почему грузит на ??% cpu - ответить не могу, но попробуй запустить как-нибудь так
Код:
#NoTrayIcon
While	1
   If Not ProcessExists('CommFort.exe') Then
	  Run('D:\CommFort\CommFort.exe')
	  WinWaitActive("Добро пожаловать")
	  Send("{DOWN}")
	  Send("{Enter}")
   EndIf
   Sleep (3000)
WEnd
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Sunnych
во первых
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Глобальный модератор.




во вторых, мне не совсем понятен второй цикл - какой в нем смысл, если он выполняется всего один раз?
в третьих, не знаю, что там с компилятором, но Sleep() которая обычно снижает нагрузку процессора находится внутри оператора условия, то есть если условие не выполнено, то и Sleep'a не будет. поэтому предлагаю поставить Sleep(10) за оператор условия. а поэтому, мой вердикт - скорее всего опрашиваемый процесс уже существует, отсюда и нагрузка.


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

---Zak---
в таком случае паузы, которая, как я полагаю, необходима для полной загрузки приложения не будет и горячие клавиши могут не сработать.
Код:
#NoTrayIcon
While   1
   If Not ProcessExists('CommFort.exe') Then
      Run('D:\CommFort\CommFort.exe')
      Sleep (3000)
      WinWaitActive("Добро пожаловать")
      Send("{DOWN}")
      Send("{Enter}")
   EndIf
   Sleep (10)
WEnd
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
Kaster
Ну почему это не будет - первый раз скрипт запустит без задержек программу, потом скрипт будет ждать появления окна "Добро пожаловать" и после чего уже нажимаем кнопочки.
Далее спим и проверяем в процессе программу, если она еще работает - спим дальше.

А у Вас получается, что Sleep() перед запуском программы
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
---Zak--- [?]
А у Вас получается, что Sleep() перед запуском программы
да, это я строкой промахнулся. поправил
Ну почему это не будет - первый раз скрипт запустит без задержек программу
я про то же. я деталей не знаю, но предполагаю, что задержка нужна для полной загрузки программы, прежде чем она создаст окна и начнет обрабатывать приходящие Send'ы


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

Sunnych
я все понимаю, но в предупреждении ведь картинки есть на какие кнопки нажимать. что не так?
 
Автор
S

Sunnych

Новичок
Сообщения
2
Репутация
0
Спасибо за помощь, проблема оказалась в Sleep(е). Поставил в конце цикла и все заработало, загрузка процессора 1-2 %
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Sunnych

[info border=#0000ff float=left]На форуме принято помечать тему решенной после получения ответа на свой вопрос!
Вверху или внизу темы нажмите на ссылку такого вида:
package_old.gif
Тема не решена
[/info]
 
Верх