Что нового

_Singleton или If Not ProcessExists

Guezt

Продвинутый
Сообщения
335
Репутация
82
qsort [?]
В довольно длительном цикле необходимо запустить екзешник (естественно, один раз!)
Что значит естественно, один раз? имеется в виду всего один раз надо запустить или каждый раз как доходит до места запуска его в цикле ?

Хотелось бы, конечно, чтобы и проверять не надо было, и запускаемый екзешник не тормозил...
Что значит не тормазил?! если имеется в виду использование скрипта в виде exe файла, то не проще ли реализовать тогда этот момент, как функцию ? и внедрить в основной цикл тогда надобность запускать и проверять вообще отпадет сама собой.
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
Guezt Gutsy [?]
Что значит не тормазил?! если имеется в виду использование скрипта в виде exe файла, то не проще ли реализовать тогда этот момент, как функцию ? и внедрить в основной цикл тогда надобность запускать и проверять вообще отпадет сама собой.
Хороший вариант, если он уместен.

Но если, все же необходим exe файл. То стоит уточнить - это autoit файл?
Если да, то необходимо в начало запускаемоего exe файла вставить:

Код:
#include <Misc.au3>

If Not _Singleton('any any text !@#$%^&*() any any text !@#$%^&*() any any text !@#$%^&*()', 1) Then
	Msgbox(48, 'Warning', 'Program is already running')
	Exit
EndIf


Если запускаемый файл - это не autoit файл.
То необходимо самому проверять на наличие процесса в скрипте, который запускает exe.
Aлгаритм примерно такой:
1. Запустить exe.
2. В цикле проверять наличие процесса, секунды 2-10 (как уж угодно).
3. Если процесс не обнаружен, то ExitLoop и ошибка запуска exe.
3. Если обнаружен, ExitLoop и продолжить выполнение скрипта.
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
qsort
Тогда, пример алгаритма:

Родительский файл:
1. Запускает exe.
2. Проверять наличие процесса, секунды 2-10 (как уж угодно) (ну в цикле конечно ж).
.. далее все по желанию. Т.к. процесс может не запустить - значит ошибка, можно повторить запуск и если вторая ошибка, то уже прекртить попытки и остановить работу задачи. Ну если процесс запустился то все ок, продолжаем работу.

Дочерный скрипт:
Запускается с _Singleton и выполняет свою работу.


qsort [?]
Мне нужно не выдавать мессаги с предупреждениями - я ж и сам знаю, что файл будет запускаться, раз уж он в цикле
Сами знаете, так сами и пишите код как удобно. Это же только пример.


что лучше использовать - ЛИБО проверять наличие процесса в цикле (что, разумеется, тормозит цикл), ЛИБО не проверяя процесса, запускать файл с этим самым _Singleton'ом (а это, соответственно, будет тормозить файл).
Если потраченное время на проверку запуска процесс - это тормаза, то да, это затормазит.
_Singleton тормазить не будет.

В этом случае, если нет необходимости дожидаться запуска дочерного скрипта. То лучше:
1. В родительском срипте проверить, нет ли процесса дочерного срикпта.
2. Если уже есть дочерный скрипт, то убить его.
3. В родительском срикпте запустить дочерный скрипт и продолжить работу (без циклов)
4. Дочерный скрипт запускать с _Singleton.
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
qsort [?]
Вопрос лишь в том, нельзя ли обойтись без пункта 1, использовав
Да, можно.
При этом в цикле while каждый раз будет запускаться дочерный скрипт. Каждый новый экземпляр дочерного скрипта будет само закрываться, т.к. уже есть ранее запущенный дочерный скрипт. При этом нагрузка на процессор ПК будет очень существенная, т.к. дочерный скрипт все равно же будет запускаться. Поэтому гараздо рациональней проверять на наличие дочерного процесса.
 
Верх