Форум » [x]Harbour » Как "заморозить" выполнение программы ? » Ответить

Как "заморозить" выполнение программы ?

Andrey: Всем привет. Подскажите как можно остановить (заморозить) выполнение программы до выполнения определенного события в другой программе ? Т.е. я из своей программы на хХарборе (терминалка) запускаю допустим программу "Скачивания из инета" на МиниГуи. Терминалку на хХарборе нужно "заморозить" до конца скачивания ! Иначе ЮЗВЕР будет тыкать мышкой раньше времени.... После того как скачался файл нужно вернуться обратно в терминалку на хХарборе ! Можно конечно сделать "семафорный файл" после получения файла из инета, а в хХарборе проверять каждую минуту есть такой файл или нет. Но это можно было делать и на Клипере (проверку файла). А что нам может предложить хХарбор ?

Ответов - 66, стр: 1 2 3 4 All

SergKis: PS Ф-я с mutex, была выше, используется для блокировки повторных запусков с иконки, far кликами Enter-ом. Разрешаются повторные запуски проги с одного каталога + ini файл, т.е. с разными ini (беру без пути), можно делать запуски одной программы уст. в какую то dir, а повторный запуск с этим ini не пройдет, причем я не даю никаких сообщений на это, просто выхожу из запуска если mutex уже есть. Т.е. с одного каталога установки программу можно запускать с разными ini (в них указание на базу) Имя mutex формирую upper(hb_ProgName() + cDop) в ф-ии видно алгоритм. В hmg ф-я IsExeRuning() так же использует mutex, но только из имени exe, жесткая блокировка 2 запуска проги.

Haz: Спасибо за информацию, попробую

Andrey: Andrey пишет: Подскажите как можно остановить (заморозить) выполнение программы до выполнения определенного события в другой программе ? Смотреть пример у Григория \samples\Advanced\FreezeAppExecution) ! Всегда использовал и считал что невозможно запустить вторую копию программы... [pre2] // Проверка на запуск второй копии программы OnlyOneInstance( PROGRAM ) [/pre2] Однако мои юзера опровергли это мнение... Можно запустить вторую копию программы при одном условии, если комп/сервер-терминала выводишь из спящего режима, то вторую копию программы можно запустить. Сам так один раз смог у себя сделать, повторно не смог. Как это (второй запуск) можно железно прекратить ? Только нужно учитывать, что прога может запускаться на сервере-терминалов у разных пользователей одновременно.


SergKis: Andrey Используй (с mutex) SET MULTIPLE QUIT // выход без сообщения или SET MULTIPLE QUIT WARNING // выход с сообщением или ф-ей IsExeRunning( StrTran( GetExeFileName (), '\', '_' ) ) где параметр (цветом) может быть каталог, ini файл, ... что будет идентифицировать уникальность запуска

Andrey: SergKis пишет: SET MULTIPLE QUIT WARNING // выход с сообщением А туда можно прикрутить переключение на хендл запущеной программы ?

SergKis: Andrey пишет А туда можно прикрутить переключение на хендл запущеной программы ? Это команда препроцессора, так что замени и делай, что надо[pre2] #translate SET MULTIPLE QUIT [ <warning: WARNING> ] ; => ; iif ( _HMG_IsMultiple , ( iif ( <.warning.> , AlertStop( _HMG_MESSAGE\[4] ) , ) , ExitProcess() ) , ) значение _HMG_IsMultiple такое (PROCEDURE Init) _HMG_IsMultiple := IsExeRunning ( StrTran( GetExeFileName (), '\', '_' ) ) [/pre2]



полная версия страницы