как отследить что прога зависла?
Как мне отследить зависла какая-либо прога или нет.
Просто нужно чтобы одна прога работала постоянно и если она зависла мне нужно ее перезапустить.
Воотт...
Подскажите плизззз как это сделать, или если кто нить уже писал такое помогите кодом.....если не трудно и не жалко.
Смысл был такой: первая программа, сриди основной свое работы, периодически выполняет что-то, по чему можно узнать работает она или нет - напрмер пишет в некоторый файл время. А вторая программа периодически читает из этого файла время; если время давно не обновлялось, это может означать, что первая программа зависла. Тогда вторая перестартует ее.
Как-то мне нужно было подобную штуку соорудить. тогда я сделал вторую небольшую программу, которая следила за активностью первой и, в силу простоты выполняемых действий, имела малую вероятность зависания.
Смысл был такой: первая программа, сриди основной свое работы, периодически выполняет что-то, по чему можно узнать работает она или нет - напрмер пишет в некоторый файл время. А вторая программа периодически читает из этого файла время; если время давно не обновлялось, это может означать, что первая программа зависла. Тогда вторая перестартует ее.
Теория создания Активности/Неактивносит юзеров на сайте.. чатах.))) А также пинг-понг, и вообще работа с сетью=)))
У меня такой вопрос.....
Как мне отследить зависла какая-либо прога или нет.
Просто нужно чтобы одна прога работала постоянно и если она зависла мне нужно ее перезапустить.
Воотт...
Подскажите плизззз как это сделать, или если кто нить уже писал такое помогите кодом.....если не трудно и не жалко.
Для начала узнай Handle главного окна приложения, а дальше можно использовать 2 недокументированные функции : для Вин ХР и Вин 2000 - IsHungAppWindow(), а для Вин 98 - IsHungThread().
Короче используй функцию наподобие такой (Она автоматически определяет какая Виндовз запущена и вызывает соответствующую функцию) :
[COLOR=royalblue]
#define WINDOW_STATUS_INVALID_PARAM 0
#define WINDOW_STATUS_WORKING 1
#define WINDOW_STATUS_HUNG 2
DWORD IsHungWindow(HWND hWnd)
{
if(!IsWindow(hWnd))return WINDOW_STATUS_INVALID_PARAM;
HINSTANCE hLib=GetModuleHandle("user32.dll");
if(!hLib)return WINDOW_STATUS_INVALID_PARAM;
OSVERSIONINFO osvi;
osvi.dwOSVersionInfoSize = sizeof(osvi);
GetVersionEx(&osvi);
if(osvi.dwPlatformId==VER_PLATFORM_WIN32_NT)
{
BOOL (WINAPI * _IsHungAppWindow)(HWND);
*(FARPROC *)&_IsHungAppWindow=GetProcAddress(hLib, "IsHungAppWindow");
if(_IsHungAppWindow == NULL)return WINDOW_STATUS_INVALID_PARAM;
if(_IsHungAppWindow(hWnd)==TRUE)return WINDOW_STATUS_HUNG;
else return WINDOW_STATUS_WORKING;
}
else
{
DWORD dwThreadId = GetWindowThreadProcessId(hWnd, NULL);
BOOL (WINAPI * _IsHungThread)(DWORD);
*(FARPROC *)&_IsHungThread =GetProcAddress(hLib, "IsHungThread");
if(_IsHungThread == NULL)return WINDOW_STATUS_INVALID_PARAM;
if(_IsHungThread(dwThreadId)==TRUE)return WINDOW_STATUS_HUNG;
else return WINDOW_STATUS_WORKING;
}
return WINDOW_STATUS_INVALID_PARAM;
}
[/COLOR]
Если прога зависла - возвращает WINDOW_STATUS_HUNG, если передал неправильный hWnd - WINDOW_STATUS_INVALID_PARAM, Если всё ОК - WINDOW_STATUS_WORKING.
:D
буду пробовать........