как поределить, что процесс завис?

Serega128
Дата: 29.11.2007 13:35:10
Подскажите, как поределить, что процесс завис(Not Responding в Task Manager)? Для получения перечня процессов использую такой код (пишу на С++):
HANDLE hProcessSnap = NULL;
PROCESSENTRY32 pe32 = {0};

hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPALL, NULL);
pe32.dwSize=sizeof(PROCESSENTRY32);
if(Process32First(hProcessSnap,&pe32)) ListBox1->AddItem(pe32.szExeFile, this);
ListBox1->AddItem(pe32.szExeFile, this);
pe32.dwSize=sizeof(PROCESSENTRY32);
while(Process32Next(hProcessSnap,&pe32))
{
ListBox1->AddItem(pe32.szExeFile, this);
pe32.dwSize=sizeof(PROCESSENTRY32);
}
CloseHandle(hProcessSnap);
miksoft
Дата: 29.11.2007 13:42:43
вообще-то Not Responding в Task Manager не означает, что процесс завис.
Мимопроходящий
Дата: 29.11.2007 13:44:14

Привет, Serega128!
Ты пишешь:

Serega128
S> Подскажите, как поределить, что процесс завис
когда-то обсуждали на rsdn.
http://rsdn.ru/forum/?mid=1925178

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.4

Petro123
Дата: 29.11.2007 14:06:34
в реестре есть параметр:
скока миллисекунд означает зависание для OS
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
Serega128
Дата: 29.11.2007 14:22:52
>Petro123
А где этот параметр хранится?

>Мимопроходящий
В той статье описан способ работы со своим потоком. А как быть если работаешь с чужим?
Serega128
Дата: 29.11.2007 14:40:10
Делал так: вешал программу (её хэндл = 45) путем бесконечного цикла, а из другой программы вызывал такие функции:

if(WaitForSingleObject((void*)45, 1) == WAIT_TIMEOUT) ShowMessage("WAIT_TIMEOUT");
if(WaitForSingleObject((void*)45, 1) == WAIT_OBJECT_0) ShowMessage("WAIT_OBJECT_0");

го это не помогло :(
Dimitry Sibiryakov
Дата: 29.11.2007 14:50:43

Serega128
го это не помогло :(

Вообще-то для этого используют SendMessageTimeout...

Posted via ActualForum NNTP Server 1.4

Barlone
Дата: 29.11.2007 14:53:10
Not Responding в Task Manager относится не к процессу, а к окну и означает, что не обрабатываются сообщения.
msdn
an application can check if a window is responding to messages by sending the WM_NULL message with the SendMessageTimeout function
Serega128
Дата: 29.11.2007 16:41:34
Как получить HWND окна зная имя\номер процесса?
Dimitry Sibiryakov
Дата: 29.11.2007 16:54:04

Serega128

Как получить HWND окна зная имя\номер процесса?

Перебрать все окна, проверяя какому процессу они принадлежат.

Posted via ActualForum NNTP Server 1.4