|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
07.12.2010, 17:41 | #1 |
Новичок
Джуниор
Регистрация: 07.12.2010
Сообщений: 2
|
watch looker на Делфи
Нужно написать утилиту, которая запускает и следит за программой через фиксированные интервалы времени и при зависании и т.д. срубает ее. Как отследить завасание программки?
|
07.12.2010, 17:43 | #2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
ну смотря что считать зависанием, то что интерфейс не реагирует не на что?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
07.12.2010, 17:47 | #3 |
Форумчанин
Регистрация: 17.02.2010
Сообщений: 399
|
function AppIsResponding(h:HWND): Boolean;
const TIMEOUT = 5000; var Res: DWORD; begin if h <> 0 then Result := SendMessageTimeOut(H,WM_NULL,0,0, SMTO_ABORTIFHUNG or SMTO_NOTIMEOUTIFNOTHUNG,TIMEOUT, Res) <> 0 else result:=false; end; function IsAppRespondigNT(wnd: HWND): Boolean; type TIsHungAppWindow = function(wnd:hWnd): BOOL; stdcall; var hUser32: THandle; IsHungAppWindow: TIsHungAppWindow; begin Result := True; hUser32 := GetModuleHandle('user32.dll'); if (hUser32 > 0) then begin @IsHungAppWindow := GetProcAddress(hUser32, 'IsHungAppWindow'); if Assigned(IsHungAppWindow) then begin Result := not IsHungAppWindow(wnd); end; end; end; function IsAppRespondig(Wnd: HWND): Boolean; begin if not IsWindow(Wnd) then begin result:=false; Exit; end; Result := IsAppRespondigNT(wnd) end; ..... h:=findwindow(PCHAR('TForm1'),'test application'); if (IsAppRespondig(h))and(AppIsRespond ing(h)) then showmessage('yes') else showmessage('no'); Последний раз редактировалось wm_leviathan; 07.12.2010 в 17:56. |
07.12.2010, 17:54 | #4 |
Новичок
Джуниор
Регистрация: 07.12.2010
Сообщений: 2
|
более подробно....есть некие циклы в программе, если они завершаются успешно,то в базу заноситься единичка,а если нет,то записей не заноситься и нужно написать утилиту которая бы мониторила эту таблу и если единичка не добавлена,то перезапускала основную прогу
то есть нужно в программку добавить некие точки входа, вот вопрос как правильней это сделать |
07.12.2010, 18:01 | #5 |
Пользователь
Регистрация: 01.12.2010
Сообщений: 15
|
как вариант,
Монитор <> Приложение отсылка запроса (SendMessage) <> ответ на сообщение (SendMessage) Если ответа нету в течении заданного времени, то приложение зависло. Если ответ не "единичка", то цикл не выполнился. Далее по плану. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
for z:=1 to 5 do Смотрю watch показывает декремент ... | dx+ | Общие вопросы Delphi | 3 | 24.05.2008 17:47 |