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

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

Вылетает с ошибкой (периодически) [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.


Наверх

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