Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2010, 17:41   #1
sasha_dreval
Новичок
Джуниор
 
Регистрация: 07.12.2010
Сообщений: 2
По умолчанию watch looker на Делфи

Нужно написать утилиту, которая запускает и следит за программой через фиксированные интервалы времени и при зависании и т.д. срубает ее. Как отследить завасание программки?
sasha_dreval вне форума Ответить с цитированием
Старый 07.12.2010, 17:43   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну смотря что считать зависанием, то что интерфейс не реагирует не на что?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.12.2010, 17:47   #3
wm_leviathan
Форумчанин
 
Аватар для wm_leviathan
 
Регистрация: 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.
wm_leviathan вне форума Ответить с цитированием
Старый 07.12.2010, 17:54   #4
sasha_dreval
Новичок
Джуниор
 
Регистрация: 07.12.2010
Сообщений: 2
По умолчанию

более подробно....есть некие циклы в программе, если они завершаются успешно,то в базу заноситься единичка,а если нет,то записей не заноситься и нужно написать утилиту которая бы мониторила эту таблу и если единичка не добавлена,то перезапускала основную прогу
то есть нужно в программку добавить некие точки входа, вот вопрос как правильней это сделать
sasha_dreval вне форума Ответить с цитированием
Старый 07.12.2010, 18:01   #5
NoSilence
Пользователь
 
Регистрация: 01.12.2010
Сообщений: 15
По умолчанию

как вариант,

Монитор <> Приложение
отсылка запроса (SendMessage) <> ответ на сообщение (SendMessage)

Если ответа нету в течении заданного времени, то приложение зависло. Если ответ не "единичка", то цикл не выполнился. Далее по плану.
NoSilence вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
for z:=1 to 5 do Смотрю watch показывает декремент ... dx+ Общие вопросы Delphi 3 24.05.2008 17:47