![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как поределить, что процесс завис? [D6, NT4, Win2k, WinXP]
serg128 © (2007-11-29 14:27:00)Подскажите, как поределить, что процесс завис(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);
Rouse_ (2007-11-30 18:51:00) [1]не покажи чудо народу :)
serg128 (2007-11-30 17:31:00) [2]справился! работает на 5+! Кому интересно - код выложу (на С++ правда)
Rouse_ (2007-11-29 17:36:00) [3]IsHungAppWindow()
Сергей М. (2007-11-29 16:46:00) [4]Нахрен он тебе вперся ?) Особо в связи с "кто-то там завис" ?)
serg128 (2007-11-29 16:42:00) [5]Как получить HWND окна зная имя\номер процесса?
Сергей М. (2007-11-29 15:51:00) [6]
> все время (когда прога висит и не висит) выскакивает WAIT_TIMEOUT
А что ты ожидал увидеть ?
serg128 (2007-11-29 15:48:00) [7]Продвинулся дальше: теперь у меня такой код:
HANDLE hp = OpenProcess(PROCESS_ALL_ACCESS, true, 5548);
if(WaitForSingleObject(hp, 1) == WAIT_TIMEOUT) ShowMessage("WAIT_TIMEOUT");
if(WaitForSingleObject(hp, 1) == WAIT_OBJECT_0) ShowMessage("WAIT_OBJECT_0");
CloseHandle(hp);
Но теперь у меня все время (когда прога висит и не висит) выскакивает WAIT_TIMEOUT :(
Сергей М. (2007-11-29 15:34:00) [8]
> 45 - это для примера
Ну и нахрена это пример ?
И ежу понятно, что первый параметр вайт-функциии есть хэндл объекта синхронизации.
> это не помогло
Значит if-условие ложно.
homm (2007-11-29 15:33:00) [9]> [0] serg128 (29.11.07 14:27)
> Подскажите, как поределить, что процесс завис(Not Responding
> в Task Manager)?
Дак завис, или Not Responding в Task Manager????
serg128 (2007-11-29 15:31:00) [10]45 - это для примера. По сути есть что то?
Сергей М. (2007-11-29 14:43:00) [11]
> её хэндл = 45
В каком огороде такие нечетныехэндлы растут ?)
serg128 (2007-11-29 14:39:00) [12]Согласен, но тогда интересует его таймаут. Делал так: вешал программу (её хэндл = 45) путем бесконечного цикла, а из другой программы вызывал такие функции:
if(WaitForSingleObject((void*)45, 1) == WAIT_TIMEOUT) ShowMessage("WAIT_TIMEOUT");
if(WaitForSingleObject((void*)45, 1) == WAIT_OBJECT_0) ShowMessage("WAIT_OBJECT_0");
го это не помогло :(
tesseract (2007-11-29 14:31:00) [13]
> Подскажите, как поределить, что процесс завис(Not Responding
> в Task Manager)
А кто сказал, что он завис? Возможно просто ждет окончания дисковой операции. 1с так "зависает" по сто раз на дню.