Текущий архив: 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.45 MB
Время: 0.008 c