powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Проверить наличие работающего лоадера?
25 сообщений из 42, страница 1 из 2
Проверить наличие работающего лоадера?
    #33458750
boogiman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день всем! Хотелось бы задать такой вопросик! Есть работающий лоадер пусть называется mail.exe (написан на Power- 9.0). Он просто закачивает данные из DBF - файлов - в Sybase -12.5 базу! Проблемы начинаются тогда, когда умные пользователи запускают две версии данного лоадера, начинаются задвоение с нумерацией в базе (всему сносит мозги). Запускать на отработку лоадер раз в пол часа к примеру тоже неправильно! Он могет отработать через пять минут, а может и через 40. К тому же пользователи могут вспомнить про чудные клавиши ctr-alt-delte и срубить лоадер, которой отработал только на половину к примеру. Может у кого то есть мысли, поделитесь опытом плиз, как лучше работать с лоадером. Для меня эта область немного нова! Зараннее спасибо всем!
...
Рейтинг: 0 / 0
Проверить наличие работающего лоадера?
    #33458774
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть несколько споособов. Например можно использовать WinAPI функцию FindWindow,чтобы искать этот лоадер среди запущенных программ.
Можно испрользовать функции управления мьютексами, открывая мьютекс при старте программы, и закрывая по выходу. Тогда другая копия программы не сможет открыть мьютекс, пока первая его не закроет и будет либо ждать либо сразу завершаться (при аварийном завершении программы система закроет мьютекс автоматически).
...
Рейтинг: 0 / 0
Проверить наличие работающего лоадера?
    #33458838
boogiman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, Марк за ответ! Я вот нашёл в инете примерчик FindWindow("Type32_Main_Window", NULL);. Но немного не понял (может туплю с утра), как мне в системных процессах проверять существующий процесс (зная его имя mail.exe). Может у Вас есть действующий пример?
...
Рейтинг: 0 / 0
Проверить наличие работающего лоадера?
    #33458909
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boogiman Я вот нашёл в инете примерчик FindWindow("Type32_Main_Window", NULL);. Но немного не понял (может туплю с утра), как мне в системных процессах проверять существующий процесс (зная его имя mail.exe). Может у Вас есть действующий пример?
Здесь не название исполняемого файла нужно указвать, а имя класса окна в первом параметре (укажите null), а во втором параметре - укажите то, что пишется у вас в заголовке окна (желательно там написать что-нибудь поэкзотичнее :) ).
...
Рейтинг: 0 / 0
Проверить наличие работающего лоадера?
    #33458920
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boogimanкак мне в системных процессах проверять существующий процесс (зная его имя mail.exe).
Если Вы хотите искать таким способом, то Вам необходимо использовать функции EnumProcesses, Process32First, Process32Next.
...
Рейтинг: 0 / 0
Проверить наличие работающего лоадера?
    #33458926
boogiman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, Марк! Я сыт!!!
...
Рейтинг: 0 / 0
Проверить наличие работающего лоадера?
    #33458982
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Осталось выяснить еще пару вопросов:
- что будет если пользователи одновременно запустят "лоадер" с разных рабочих мест
- почему "задвоение" нумерации не решается на стороне Sybase 12.5.
...
Рейтинг: 0 / 0
Проверить наличие работающего лоадера?
    #33459042
boogiman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> To Локшин Марк
1. Лоадер крутится на одной выделенной машине в каждом филиале (под филиал заточен конкретный сервак).
2. Логика сосредоточена к сожалению в самом лоадере (текущий номер для записи выисляется типа nom_new = max(nom) + 1 + в лоадере осуществляется наличие самого заносимого файла).

Изначально лоадер написан не мной (я ловлю его глюки), в нём много чего намешано, пока руки не доходят переписать.
...
Рейтинг: 0 / 0
Проверить наличие работающего лоадера?
    #33459353
Фотография Ivan195
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
FUNCTION ulong CreateMutexA(ulong lpMutexAttributes, boolean bInitialOwner, REF string lpszName) LIBRARY "kernel32.dll"  
FUNCTION long GetLastError() LIBRARY "kernel32.dll"

string as_appname
constant ulong ERROR_ALREADY_EXISTS =  183 
  constant ulong SUCCESSFUL_EXECUTION =  0 
  ulong lul_mutex
  ulong lpsa
  ulong lul_last_error
  boolean lb_ret = FALSE
as_appname='avtokomp.exe'
  IF NOT (Handle(GetApplication()) =  0 ) THEN
     lul_mutex = CreateMutexA(lpsa, FALSE, as_appname)
     lul_last_error = GetLastError()
     lb_ret = NOT (lul_last_error = SUCCESSFUL_EXECUTION)
  END IF

if lb_ret then
	MessageBox("Внимание!","Приложение уже запущено!")
	halt close
end if
...
Рейтинг: 0 / 0
Проверить наличие работающего лоадера?
    #33459440
boogiman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем! Я вот тока что увидел сам 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
...
Рейтинг: 0 / 0
Проверить наличие работающего лоадера?
    #33459663
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле, использование мьютексов - концептуально более правильно, т.к. в случае FindWindow если запускать процессы один за другим можно всякие побочные эффекты получить - например, оба увидят друг друга и оба закроются.
...
Рейтинг: 0 / 0
Проверить наличие работающего лоадера?
    #33459779
boogiman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо! Если наступлю на те грабли, которые вы описывали, то перепишу с использованием мьютексов.
...
Рейтинг: 0 / 0
Проверить наличие работающего лоадера?
    #33460219
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Особенно если заголовок окна динамически изменяется
...
Рейтинг: 0 / 0
Проверить наличие работающего лоадера?
    #33526594
boogiman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь, за намученность вопроса! Но.. творятся странные вещи! Мной была сделана доработка лоадера (пусть будет loader1) с использованием Mutex - ов! Этот лоадер запускается через каждые 180 секунд основным мультилоадером.Если серваки перегружены то loader1 отрабатывает больше чем за 3 минуты, и на следующем шаге loader1 не запускается, благодаря использованию Mutex - ов (что совершенно правильно).Существует другая проблема происходит глюк где- то раз в двое суток! Loader1 висит в трее часами и не срубается, что он делает неведомо (но данные не обрабатывает и window - нет), такое чуство, что просто висит левая версия Mutex - а в трее и всё, окошко при этом не образуется!Приходится срубать данную версию и всё. В чём может быть проблема, пробовал по отработке лоадера ставить:

GarbageCollect() и Halt Close
не помогает! Может кто сталкивался? Спасибо!
...
Рейтинг: 0 / 0
Проверить наличие работающего лоадера?
    #33526829
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boogimanтакое чуство, что просто висит левая версия Mutex
Это про что? Не совсем понятно о чем речь. Программа не может захватить мьютекс? Ну так можно поставить не infinite ожидание, а какое-нибудь другое и переодически чего-нибудь в лог отписывать например, а затем опять ожидать, если на это подозрения. Кстати, mutex под win 98 не корректно работают, причем эта же программа под NT шуршит нормально.
...
Рейтинг: 0 / 0
Проверить наличие работающего лоадера?
    #33526974
rcryo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
извините за глупый вопрос, не работал с ASE
а разве сама база не может закачить в себя эти самые dbf-файлы ?
и никаких проблем ни с пользователями ни с мьютексами
...
Рейтинг: 0 / 0
Проверить наличие работающего лоадера?
    #33526983
boogiman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага! Тока эти файлы надо сначала расшифровать + разархивировать ну и исчё всяких накруток по логике! Мне достался уже готовый продукт (см. выше), а то что нароботано месяцами, с нуля переписывать смысла нету!
...
Рейтинг: 0 / 0
Проверить наличие работающего лоадера?
    #33527293
Tea-pot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь за вмешательство в умные беседы.

А если просто одним процессом подготавливать файлы и сбрасывать в определеннй каталог, а другим - загружать из каталога?


Или cовсем по колхозному. копировать файл перед обработкой в файл с каким-нибудь определенным именем, а после обработки удалять. При запуске лоадера проверять - если талой фаил есть, то не запускать.
...
Рейтинг: 0 / 0
Проверить наличие работающего лоадера?
    #33527636
boogiman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребята, вы советуете ахинею, лодер закачивает тысячи файлов без проблем, в нём замешана бухгалтерская логика, он писался и переписывался пол года! Я хочу просто избавиться от лишнихз процессов в задачах! Авы гоните туфту... Я ждал советов в сторону:
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"
Примеры их использования, ну ладно сам докопаюсь! Всё равно спасибо!
...
Рейтинг: 0 / 0
Проверить наличие работающего лоадера?
    #33527791
zuzu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 boogiman,
под лоадером подразумевается что у тебя один exe файл?
или куча скриптов ?

если один exe файл,
то в Visual Studio есть утилита Spy,
с помощю ее, найди как называется класс твоего окна,
далее юзай findwindow,
если нашел то на выход.

но помоему у тебя еще могут быть проблемы в самом лоадере
может быть он при определенных обстоятельств зацыкливается в бесконечность...
...
Рейтинг: 0 / 0
Проверить наличие работающего лоадера?
    #33527979
boogiman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>To zizu
Один exe - файл и одно окно w_main! Да нахрен мне Spy? Я бы и так FindWindow заюзал, тут скорее другая фигня! Окошка нет, а thread висит в процессах, а как срубить процесс зная только название exe- ка и не имея Handle окна я не знаю!
...
Рейтинг: 0 / 0
Проверить наличие работающего лоадера?
    #33528065
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boogimanа как срубить процесс зная только название exe- ка и не имея Handle окна я не знаю!
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/enumprocesses.asp
...
Рейтинг: 0 / 0
Проверить наличие работающего лоадера?
    #33528106
boogiman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, Марк! То что надо! А примерчика на твоём сайте нету?
...
Рейтинг: 0 / 0
Проверить наличие работающего лоадера?
    #33529101
zuzu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 boogiman,
зачем процесс убивать ?
программа сама должна уметь выходить, тоесть заканчиватся,
а то что она у тебя грузится означает что она у тебя зацыкливается,
так что лучше поищи баги в этом лоадере и все будет ок.
...
Рейтинг: 0 / 0
Проверить наличие работающего лоадера?
    #33529462
boogiman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> To Zizu А вы уверены, что даёте правильный совет!
Я нет, если не сталкивались с лоадерами, то не давайте безолаберных советов! У меня в этом лоадере стоят сотни insert in log, вставка записей в файл о промежуточной работе лоадера! Каждый раз левый thread появляется на одном и том же месте: ровно перед HaltClose (итоговым закрытием приложения). Такое чуство, как будто один раз из 1000 HaltClose - не отрабатывает! Ладно я сам докапаюсь! Всё равно спасибо!
...
Рейтинг: 0 / 0
25 сообщений из 42, страница 1 из 2
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Проверить наличие работающего лоадера?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]