Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как поределить, что процесс завис? [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с так "зависает" по сто раз на дню.


Наверх

Титульная страница Поиск, карта сайта Написать письмо