![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вылетает с ошибкой (периодически) [D7, WinXP]
ms.krabs © (2010-07-13 21:20:00)Есть проблема, запускаю поток который должен закрывать зависшие приложения. Но периодически возникает AcessViolation, т.е. 2 из 3 - ошибка. Без него проблем нет. Проблемы в CloseWin нет.
procedure CloseWin(h:HWND); //Убивание процесса
var
PID:Cardinal;
hProc:Cardinal;
begin
GetWindowThreadProcessId(h,PID);
hProc:=OpenProcess(PROCESS_TERMINATE,true,PID);
TerminateProcess(hProc,0);
CloseHandle(hProc);
end;
procedure Close; //Поиск зависших окон
var
h:HWND;
n:Array[0..255] of Char;
begin
h:=FindWindow(nil,nil);
while (h<>0) do
begin
GetWindowText(h,n,255);
if (pos(CAPTION,n)>0) and (pos('отвечает',n)>0) then
begin
CloseWin(h);
Exit;
end;
h := GetNextWindow(h,GW_HWNDNEXT);
end;
end;
procedure CloseThread; //Поток поиска
begin
while true do
begin
Close;
Sleep(10000);
end;
end;
Leonid Troyanovsky (2010-07-17 12:28:00) [1]
> Deltas © (16.07.10 23:39) [7]
> А там нет функции потока.
Я собс-ными глазами прочел комментарий,
и мое предположение ничем не хуже
> Можно только предположить, что CloseThread вызывается из
> функции потока.
> Показывайте как поток создаете.
Автор давно уже загорает на берегу водоема.
--
Regards, LVT.
Deltas (2010-07-16 23:39:00) [2]
> Leonid Troyanovsky © (15.07.10 08:53) [3]
> Потому, что функция потока не соответствует ни одному
> разумному прототипу.
А там нет функции потока. Можно только предположить, что CloseThread вызывается из функции потока.
ms.krabs (13.07.10 21:20) [0]
Показывайте как поток создаете.
_Юрий (2010-07-16 21:38:00) [3]Вероятно, поток создается через API, и флаг для менеджера памяти не выставлен
Anatoly Podgoretsky (2010-07-15 10:41:00) [4]
> Leonid Troyanovsky © (15.07.10 08:53) [3]
По нашему по русски - и переписать все нафиг.
brother (2010-07-15 09:30:00) [5]согласен
Leonid Troyanovsky (2010-07-15 08:53:00) [6]
> brother © (15.07.10 08:39) [2]
> Имена процедур не соответсвуют коду внутри, вот и путаница.
Не путаница, а AV.
Потому, что функция потока не соответствует ни одному
разумному прототипу.
И, во-ще, оный код легче выкинуть, чем поправить.
--
Regards, LVT.
brother (2010-07-15 08:39:00) [7]Имена процедур не соответсвуют коду внутри, вот и путаница...
Leonid Troyanovsky (2010-07-14 07:56:00) [8]
> ms.krabs (13.07.10 21:20)
> n:Array[0..255] of Char;
Чего это сразу 255?
> FindWindow(nil,nil);
EnumWindows
> pos(CAPTION,n)
AnsiStrPos
> procedure CloseThread; //Поток поиска
Чего-чего?
--
Regards, LVT.