Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.09;
Скачать: CL | DM;

Вниз

Завис или не завис ?   Найти похожие ветки 

 
Stefan   (2003-12-20 20:14) [0]

Имея идентификатор процесса (dwThreadId) пытаюсь определить висит или нет этот процесс. Функция должна возвращать false, если процесс "глюканул".

Однако этого не происходит, в чём ошибка ?
(часть кода выдрал из одного хелпа на буржуйском сайте)

function Process_Gluk(dwThreadId: DWORD): Boolean;
type
TIsHungThread = function(dwThreadId: DWORD): BOOL; stdcall;
var
hUser32 : THandle;
IsHungThread : TIsHungThread;
begin
Result := True;
hUser32 := GetModuleHandle("user32.dll");
if (hUser32 > 0)
then begin
@IsHungThread := GetProcAddress(hUser32, "IsHungThread"); // для Win98
if Assigned(IsHungThread)
then Result := not IsHungThread(dwThreadId);
end;
end;


 
Digitman ©   (2003-12-21 11:24) [1]

Thread и Process - две разные разницы


 
Stefan   (2003-12-21 13:32) [2]

значит такой вариант работать не будет, что ли -

var
h : hWnd;
t : dword;

begin
h := FindWindow(PChar("OpusApp"), nil); // ищем окно Word"а
t := GetWindowThreadProcessId(h, nil); // берём его ID
if Process_Gluk(t) then // процесс в норме
else // процесс висит
end;


 
Digitman ©   (2003-12-21 14:20) [3]

процесс не может "висеть" ... нечему там висеть)

"висеть" может некий кодовый поток, т.е. не реагировать неопределенно долгое время на посылаемые ему и окнам, им созданным, сообщения извне

то что "висит" основной код.поток процесса, еще не говорит о том, что "висят" и прочие код.потоки процесса, если таковые создавались в контексте процесса

касаемо твоего кода - с чего ты взял, что ф-ция IsHungThread() найдена в user32.dll ? Ведь если ф-ция не найдена, то ф-ция Process_Gluk() у тебя вернет True, и этот результат ты с какого-то перепугу интерпретируешь как "процесс в норме" !?


 
Stefan   (2003-12-21 19:59) [4]

честно говоря я слабо разбираюсь в недокументированных функциях Windows, но есть ряд статей толковых людей - вот их примеры я и использую:

http://www.rsdn.ru/article/qna/baseserv/hungapp.xml
http://ad.adriver.ru/cgi-bin/erle.cgi?sid=458?bt=1?pz=1?sz=/?rnd=219677267

может кто объяснит мне, что я должен сделать, чтобы определить приложение "висит" или нет ?



Страницы: 1 вся ветка

Текущий архив: 2004.03.09;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.026 c
1-25741
Goida
2004-02-26 17:10
2004.03.09
Точное время!


3-25707
YuRock
2004-02-10 14:58
2004.03.09
ADO, DBase, индексы


6-25847
alexEagle
2003-12-22 15:45
2004.03.09
OnExecute для TIdTCPClient


14-25877
OlimPer
2004-02-16 22:10
2004.03.09
Как сделать так, чтобы пользователь не мог пользоваться интренето


1-25760
Ш-К
2004-02-26 13:51
2004.03.09
Дин. массивы.