|
Проверить наличие работающего лоадера?
|
|||
---|---|---|---|
#18+
Добрый день всем! Хотелось бы задать такой вопросик! Есть работающий лоадер пусть называется mail.exe (написан на Power- 9.0). Он просто закачивает данные из DBF - файлов - в Sybase -12.5 базу! Проблемы начинаются тогда, когда умные пользователи запускают две версии данного лоадера, начинаются задвоение с нумерацией в базе (всему сносит мозги). Запускать на отработку лоадер раз в пол часа к примеру тоже неправильно! Он могет отработать через пять минут, а может и через 40. К тому же пользователи могут вспомнить про чудные клавиши ctr-alt-delte и срубить лоадер, которой отработал только на половину к примеру. Может у кого то есть мысли, поделитесь опытом плиз, как лучше работать с лоадером. Для меня эта область немного нова! Зараннее спасибо всем! ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2005, 10:17 |
|
Проверить наличие работающего лоадера?
|
|||
---|---|---|---|
#18+
Есть несколько споособов. Например можно использовать WinAPI функцию FindWindow,чтобы искать этот лоадер среди запущенных программ. Можно испрользовать функции управления мьютексами, открывая мьютекс при старте программы, и закрывая по выходу. Тогда другая копия программы не сможет открыть мьютекс, пока первая его не закроет и будет либо ждать либо сразу завершаться (при аварийном завершении программы система закроет мьютекс автоматически). ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2005, 10:24 |
|
Проверить наличие работающего лоадера?
|
|||
---|---|---|---|
#18+
Спасибо, Марк за ответ! Я вот нашёл в инете примерчик FindWindow("Type32_Main_Window", NULL);. Но немного не понял (может туплю с утра), как мне в системных процессах проверять существующий процесс (зная его имя mail.exe). Может у Вас есть действующий пример? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2005, 10:43 |
|
Проверить наличие работающего лоадера?
|
|||
---|---|---|---|
#18+
boogiman Я вот нашёл в инете примерчик FindWindow("Type32_Main_Window", NULL);. Но немного не понял (может туплю с утра), как мне в системных процессах проверять существующий процесс (зная его имя mail.exe). Может у Вас есть действующий пример? Здесь не название исполняемого файла нужно указвать, а имя класса окна в первом параметре (укажите null), а во втором параметре - укажите то, что пишется у вас в заголовке окна (желательно там написать что-нибудь поэкзотичнее :) ). ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2005, 11:00 |
|
Проверить наличие работающего лоадера?
|
|||
---|---|---|---|
#18+
boogimanкак мне в системных процессах проверять существующий процесс (зная его имя mail.exe). Если Вы хотите искать таким способом, то Вам необходимо использовать функции EnumProcesses, Process32First, Process32Next. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2005, 11:03 |
|
Проверить наличие работающего лоадера?
|
|||
---|---|---|---|
#18+
Спасибо, Марк! Я сыт!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2005, 11:06 |
|
Проверить наличие работающего лоадера?
|
|||
---|---|---|---|
#18+
Осталось выяснить еще пару вопросов: - что будет если пользователи одновременно запустят "лоадер" с разных рабочих мест - почему "задвоение" нумерации не решается на стороне Sybase 12.5. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2005, 11:28 |
|
Проверить наличие работающего лоадера?
|
|||
---|---|---|---|
#18+
> To Локшин Марк 1. Лоадер крутится на одной выделенной машине в каждом филиале (под филиал заточен конкретный сервак). 2. Логика сосредоточена к сожалению в самом лоадере (текущий номер для записи выисляется типа nom_new = max(nom) + 1 + в лоадере осуществляется наличие самого заносимого файла). Изначально лоадер написан не мной (я ловлю его глюки), в нём много чего намешано, пока руки не доходят переписать. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2005, 11:49 |
|
Проверить наличие работающего лоадера?
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2005, 13:07 |
|
Проверить наличие работающего лоадера?
|
|||
---|---|---|---|
#18+
Спасибо всем! Я вот тока что увидел сам help от 9-ки Declare FindWindowA as a global external function: FUNCTION uint FindWindowA (long classname, & string windowname) LIBRARY "user32.dll" Then add code like the following to your application's open event: uint val val = FindWindowA(0, "MyApp Main Window") IF val > 0 THEN MessageBox("Application already running", & "MyApp is already running. You cannot & start it again") HALT CLOSE ELSE open(w_main) END IF ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2005, 13:35 |
|
Проверить наличие работающего лоадера?
|
|||
---|---|---|---|
#18+
На самом деле, использование мьютексов - концептуально более правильно, т.к. в случае FindWindow если запускать процессы один за другим можно всякие побочные эффекты получить - например, оба увидят друг друга и оба закроются. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2005, 14:42 |
|
Проверить наличие работающего лоадера?
|
|||
---|---|---|---|
#18+
Спасибо! Если наступлю на те грабли, которые вы описывали, то перепишу с использованием мьютексов. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2005, 15:13 |
|
Проверить наличие работающего лоадера?
|
|||
---|---|---|---|
#18+
Особенно если заголовок окна динамически изменяется ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2005, 17:37 |
|
Проверить наличие работающего лоадера?
|
|||
---|---|---|---|
#18+
Извиняюсь, за намученность вопроса! Но.. творятся странные вещи! Мной была сделана доработка лоадера (пусть будет loader1) с использованием Mutex - ов! Этот лоадер запускается через каждые 180 секунд основным мультилоадером.Если серваки перегружены то loader1 отрабатывает больше чем за 3 минуты, и на следующем шаге loader1 не запускается, благодаря использованию Mutex - ов (что совершенно правильно).Существует другая проблема происходит глюк где- то раз в двое суток! Loader1 висит в трее часами и не срубается, что он делает неведомо (но данные не обрабатывает и window - нет), такое чуство, что просто висит левая версия Mutex - а в трее и всё, окошко при этом не образуется!Приходится срубать данную версию и всё. В чём может быть проблема, пробовал по отработке лоадера ставить: GarbageCollect() и Halt Close не помогает! Может кто сталкивался? Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2006, 17:21 |
|
Проверить наличие работающего лоадера?
|
|||
---|---|---|---|
#18+
boogimanтакое чуство, что просто висит левая версия Mutex Это про что? Не совсем понятно о чем речь. Программа не может захватить мьютекс? Ну так можно поставить не infinite ожидание, а какое-нибудь другое и переодически чего-нибудь в лог отписывать например, а затем опять ожидать, если на это подозрения. Кстати, mutex под win 98 не корректно работают, причем эта же программа под NT шуршит нормально. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2006, 18:43 |
|
Проверить наличие работающего лоадера?
|
|||
---|---|---|---|
#18+
извините за глупый вопрос, не работал с ASE а разве сама база не может закачить в себя эти самые dbf-файлы ? и никаких проблем ни с пользователями ни с мьютексами ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2006, 19:48 |
|
Проверить наличие работающего лоадера?
|
|||
---|---|---|---|
#18+
Ага! Тока эти файлы надо сначала расшифровать + разархивировать ну и исчё всяких накруток по логике! Мне достался уже готовый продукт (см. выше), а то что нароботано месяцами, с нуля переписывать смысла нету! ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2006, 19:54 |
|
Проверить наличие работающего лоадера?
|
|||
---|---|---|---|
#18+
Извиняюсь за вмешательство в умные беседы. А если просто одним процессом подготавливать файлы и сбрасывать в определеннй каталог, а другим - загружать из каталога? Или cовсем по колхозному. копировать файл перед обработкой в файл с каким-нибудь определенным именем, а после обработки удалять. При запуске лоадера проверять - если талой фаил есть, то не запускать. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2006, 01:28 |
|
Проверить наличие работающего лоадера?
|
|||
---|---|---|---|
#18+
Ребята, вы советуете ахинею, лодер закачивает тысячи файлов без проблем, в нём замешана бухгалтерская логика, он писался и переписывался пол года! Я хочу просто избавиться от лишнихз процессов в задачах! Авы гоните туфту... Я ждал советов в сторону: FUNCTION uint GetWindowThreadProcessId (uint Wnd, uint ProcessId) LIBRARY "user32.dll" FUNCTION uint OpenProcess (ulong DesiredAccess, boolean InheritHandle, uint ProcessId) LIBRARY "KERNEL32.dll" FUNCTION uint TerminateProcess (uint Process, UINT ExitCode) LIBRARY "KERNEL32.dll" Примеры их использования, ну ладно сам докопаюсь! Всё равно спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2006, 10:03 |
|
Проверить наличие работающего лоадера?
|
|||
---|---|---|---|
#18+
2 boogiman, под лоадером подразумевается что у тебя один exe файл? или куча скриптов ? если один exe файл, то в Visual Studio есть утилита Spy, с помощю ее, найди как называется класс твоего окна, далее юзай findwindow, если нашел то на выход. но помоему у тебя еще могут быть проблемы в самом лоадере может быть он при определенных обстоятельств зацыкливается в бесконечность... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2006, 10:38 |
|
Проверить наличие работающего лоадера?
|
|||
---|---|---|---|
#18+
>To zizu Один exe - файл и одно окно w_main! Да нахрен мне Spy? Я бы и так FindWindow заюзал, тут скорее другая фигня! Окошка нет, а thread висит в процессах, а как срубить процесс зная только название exe- ка и не имея Handle окна я не знаю! ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2006, 11:23 |
|
Проверить наличие работающего лоадера?
|
|||
---|---|---|---|
#18+
boogimanа как срубить процесс зная только название exe- ка и не имея Handle окна я не знаю! http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/enumprocesses.asp ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2006, 11:41 |
|
Проверить наличие работающего лоадера?
|
|||
---|---|---|---|
#18+
Спасибо, Марк! То что надо! А примерчика на твоём сайте нету? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2006, 11:48 |
|
Проверить наличие работающего лоадера?
|
|||
---|---|---|---|
#18+
2 boogiman, зачем процесс убивать ? программа сама должна уметь выходить, тоесть заканчиватся, а то что она у тебя грузится означает что она у тебя зацыкливается, так что лучше поищи баги в этом лоадере и все будет ок. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2006, 15:59 |
|
Проверить наличие работающего лоадера?
|
|||
---|---|---|---|
#18+
> To Zizu А вы уверены, что даёте правильный совет! Я нет, если не сталкивались с лоадерами, то не давайте безолаберных советов! У меня в этом лоадере стоят сотни insert in log, вставка записей в файл о промежуточной работе лоадера! Каждый раз левый thread появляется на одном и том же месте: ровно перед HaltClose (итоговым закрытием приложения). Такое чуство, как будто один раз из 1000 HaltClose - не отрабатывает! Ладно я сам докапаюсь! Всё равно спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2006, 17:44 |
|
|
start [/forum/topic.php?fid=15&msg=33459779&tid=1335617]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 254ms |
total: | 386ms |
0 / 0 |