![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] как поставить скрипт в очередь ? |
|
|
[решено] как поставить скрипт в очередь ?
|
Старожил Сообщения: 440 |
есть у меня скрипт на autoit который может быть запущен несколько раз в то время пока первый еще не успел отработать до конца. И мне нужно что бы они как бы в очередь вставали. Работать параллельно им нельзя и сбрасывать те что запущены тоже нельзя.
Есть способ _Singleton() что бы узнать, что уже запущен скрипт, если бы можно было только 2 экземпляра запустить то я бы просто проверку в цикл поставил, но когда их может быть несколько все становится сложнее. Нужно знать длину очереди и номер в очереди, тут я малость встал. Может есть какие идеи ? |
|
Отправлено: 12:20, 16-01-2012 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать При запуске приложения проверяйте наличие процессов с тем же именем (исключая, естественно, сам текущий экземпляр приложения), получите их PID'ы, следите за процессом с наивысшим PID'ом, и ждите, пока он не будет завершён. |
Последний раз редактировалось Iska, 18-01-2012 в 10:38. Причина: Предположение не подтвердилось Отправлено: 14:10, 16-01-2012 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Iska:
|
|
------- Последний раз редактировалось Creat0R, 16-01-2012 в 20:52. Отправлено: 17:14, 16-01-2012 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Creat0R:
Я не находил информацию, как подтверждающую, либо опровергающую ранее приведённое предположение. Буду рад, ежели кто поделится. |
|
Отправлено: 17:33, 16-01-2012 | #4 |
Разный Сообщения: 1294
|
Профиль | Отправить PM | Цитировать проверяю
запускаю калькулятор PID 2148, затем блокнот PID 5120 закрываю калькулятор и блокнот снова запускаю калькулятор PID 5632, затем блокнот PID 2296 а самый высокий PID у pythonw.exe 6140, а запущен он еще утром так что по PID не отследить |
|
Отправлено: 18:39, 16-01-2012 | #5 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать В общем вот что у меня получилось:
$iQueue_Position = _AppSetQueue(500) MsgBox(64, 'Title', StringFormat('Process: %i\nQueue position: %i', @AutoItPID, $iQueue_Position)) ; #FUNCTION# ==================================================================================================== ; Name...........: _AppSetQueue ; Description....: Sets Queue for the next instances of this script. ; Syntax.........: _AppSetQueue($iWait = 500, $iOnStart = 1) ; Parameters.....: $iWait [Optional] - Wait between each queue check (default is 500 ms). ; $iOnStart [Optional/Internal] - Indicates if the function was executed on start, only internal usage. ; ; ; Return values..: Success - Return Queue position (-1 if this is the first instance of the program). ; Failure - None. ; Author.........: G.Sandler (CreatoR) ; Modified.......: ; Remarks........: ; Related........: ; Link...........: ; Example........: ; =============================================================================================================== Func _AppSetQueue($iWait = 500, $iOnStart = 1) Local $sUnique_Win, $sQueue, $aQueue, $iC, $sTmp_Script, $nEdit, $hFile, $iLast_Queue $sUnique_Win = "__Au3_Queue_Window__" $sQueue = ControlGetText($sUnique_Win, "", "Edit1") $aQueue = StringSplit($sQueue, @CRLF, 1) ;The script Exits (called by OnAutoItExitRegister) If Not IsDeclared("iOnStart") Then $sQueue = "" $iC = 0 For $i = 1 To $aQueue[0] If Not StringRegExp($aQueue[$i], '^\d+:' & @AutoItPID) Then $iC += 1 $sQueue &= $iC & ":" & StringRegExpReplace($aQueue[$i], '^\d+:', '') & @CRLF EndIf Next $sQueue = StringStripWS($sQueue, 3) ControlSetText($sUnique_Win, "", "Edit1", $sQueue) Return EndIf OnAutoItExitRegister("_AppSetQueue") If Not WinExists($sUnique_Win) Then $sTmp_Script = _ '#NoTrayIcon' & @CRLF & _ 'GUICreate("' & $sUnique_Win & '", 100, 20)' & @CRLF & _ '$nEdit = GUICtrlCreateEdit("1:' & @AutoItPID & '", 0, 0, 100, 20)' & @CRLF & @CRLF & _ 'While GUICtrlRead($nEdit) <> ""' & @CRLF & _ ' Sleep(100)' & @CRLF & _ 'WEnd' & @CRLF & @CRLF & _ 'FileDelete(@TempDir & "\~tmp_GUI_src.tmp")' & @CRLF & _ 'Run(@ComSpec & '' /C Del /F /Q "'' & @TempDir & ''\~tmp_GUI.tmp"'', '''', @SW_HIDE)' & @CRLF & _ 'Exit' & @CRLF $hFile = FileOpen(@TempDir & "\~tmp_GUI_src.tmp", 2) FileWrite($hFile, $sTmp_Script) FileClose($hFile) FileCopy(@AutoItExe, @TempDir & "\~tmp_GUI.tmp", 1) Run(@TempDir & '\~tmp_GUI.tmp /AutoIt3ExecuteScript "' & @TempDir & '\~tmp_GUI_src.tmp"') Return -1 EndIf $iLast_Queue = Number(StringRegExpReplace($aQueue[$aQueue[0]], '^(\d+)', '\1')) $sQueue &= @CRLF & $iLast_Queue + 1 & ":" & @AutoItPID ControlSetText($sUnique_Win, "", "Edit1", $sQueue) While 1 $sQueue = ControlGetText($sUnique_Win, "", "Edit1") $aQueue = StringSplit($sQueue, @CRLF, 1) If StringRegExp($aQueue[1], '^\d+:' & @AutoItPID) Then Return $aQueue[0] ;It' our turn in the queue EndIf Sleep($iWait) WEnd EndFunc |
------- Последний раз редактировалось Creat0R, 17-01-2012 в 03:28. Отправлено: 21:11, 16-01-2012 | #6 |
Старожил Сообщения: 440
|
Профиль | Отправить PM | Цитировать упс, не обновил страницу. а тут уже кучу всего написали ))
я так понимаю тут временные файлы используются ? мне приходила в голову идея с файлами, но не хотелось мучить ssd и я на эту идею подзабил. |
Отправлено: 01:59, 17-01-2012 | #7 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата mitiya:
Делается это для того, чтобы запустить дополнительный (промежуточный-нейтральный) скрипт, который действует как хранилище для очереди запускаемых копий скриптов. |
|
------- Отправлено: 02:08, 17-01-2012 | #8 |
Старожил Сообщения: 440
|
Профиль | Отправить PM | Цитировать а вы можете описать поподробней как там все работает. честно говоря код сложноват для меня.
|
Отправлено: 02:15, 17-01-2012 | #9 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата mitiya:
При повторном запуске скрипт дописывает в этот самый Edit-элемент себя как ожидающего очереди, и ждёт пока эта очередь до него дойдёт (пока в списке Edit он не будет первым). Когда скрипт завершает свою работу, он удаляет себя из списка очереди, корректируя список. Цитата mitiya:
Там где MsgBox, это и есть тело вашего скрипта. Немного подправил код. |
||
------- Отправлено: 03:20, 17-01-2012 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Помогите поставить СКРИПТ!!! | MozgNeo | Вебмастеру | 29 | 29-09-2013 13:42 | |
Не очищается очередь печати | YDen | Microsoft Windows 95/98/Me (архив) | 7 | 01-06-2009 21:40 | |
RAID - Как поступить в первую очередь? с RAID 0 | AppleNTU | Накопители (SSD, HDD, USB Flash) | 7 | 29-01-2009 09:22 | |
Очередь печати | Mix Shumaher | Microsoft Windows NT/2000/2003 | 3 | 13-03-2006 23:06 | |
очередь печати | andyzu | Microsoft Windows 95/98/Me (архив) | 3 | 05-01-2004 09:44 |
|