-
Есть проблема, запускаю поток который должен закрывать зависшие приложения. Но периодически возникает 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;
-
> 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.
-
Имена процедур не соответсвуют коду внутри, вот и путаница...
-
> brother © (15.07.10 08:39) [2]
> Имена процедур не соответсвуют коду внутри, вот и путаница.
Не путаница, а AV. Потому, что функция потока не соответствует ни одному разумному прототипу.
И, во-ще, оный код легче выкинуть, чем поправить.
-- Regards, LVT.
-
согласен
-
> Leonid Troyanovsky © (15.07.10 08:53) [3]
По нашему по русски - и переписать все нафиг.
-
Вероятно, поток создается через API, и флаг для менеджера памяти не выставлен
-
> Leonid Troyanovsky © (15.07.10 08:53) [3] > Потому, что функция потока не соответствует ни одному > разумному прототипу.
А там нет функции потока. Можно только предположить, что CloseThread вызывается из функции потока. ms.krabs (13.07.10 21:20) [0] Показывайте как поток создаете.
-
> Deltas © (16.07.10 23:39) [7]
> А там нет функции потока.
Я собс-ными глазами прочел комментарий, и мое предположение ничем не хуже
> Можно только предположить, что CloseThread вызывается из > функции потока.
> Показывайте как поток создаете.
Автор давно уже загорает на берегу водоема.
-- Regards, LVT.
|