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

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

Остановка потока [D7, WinXP]


Страницы:   1 2 3 4

Destroyer ©   (2006-08-26 21:28:00) 

Задача выполняется в потоке. По нажатию кнопки на форме надо остановить выполнение потока. Проверять флаг постоянно на отключение - не подходит. Нужно что-то типа TimerThread.Destroy.
Делаю так:

protected
   procedure Execute; override;
 public
 constructor Create(FPath: String; Fflag: boolean; RProcType:string; FExt:string);
 constructor Destroy;
 end;

...
constructor TimerThread.Destroy;
begin
exit;
end;
Но так, выдается ошибка неверный дескриптор.
Как правильно мгновенно остановить поток?


y-soft   (2006-08-28 11:08:00) [21]

>BiN ©   (28.08.06 11:02) [43]

Инструмент, конечно, не виноват, повторюсь: ОСОБО кривого нет, написано добротно.  Виноваты кривые руки. Только вот всегда есть выбор - есть, что дают, или приготовить самому, если не устраивает


Ketmar   (2006-08-28 11:06:00) [22]

> [42] y-soft ©   (28.08.06 11:01)
а исключения без менеджера памяти не живут. %-)


BiN   (2006-08-28 11:02:00) [23]


> y-soft ©   (28.08.06 10:55) [39]
>
> Несколько безаппеляционно сказано. IMHO, конечно :)


Ок, аппеляции:


> y-soft ©   (27.08.06 22:31) [21]
>
> >Пусик ©   (27.08.06 22:27) [19]
>
> А что в нем кривого особо?
>
> ОСОБО кривого нет. Есть отдельные недодуманности. Например
> метод Synchronize - основная причина тормозов в многопоточных
> программах начинающих :)


Виноват кто? Ну, конечно же, TThread. Не начинающие же.


y-soft   (2006-08-28 11:01:00) [24]

>Ketmar ©   (28.08.06 11:00) [41]

И для правильной обработки исключений


Ketmar   (2006-08-28 11:00:00) [25]

> [38] isasa ©   (28.08.06 10:53)
не для фанатов, а для менеджера памяти. %-)


isasa   (2006-08-28 10:58:00) [26]

Slym ©   (28.08.06 04:43) [30]
.... как хочется в него чегонибудь добавить, например обрыв синхронных вызовов


Для таких случаев даден флаг Terminated, что-бы нормально разрулить логику внутри метода Execute. Конечно, если сносить поток шашкой (TerminateThread), то тогда все равно. :)


y-soft   (2006-08-28 10:55:00) [27]

>BiN ©   (28.08.06 10:47) [37]

Несколько безаппеляционно сказано. IMHO, конечно :)


isasa   (2006-08-28 10:53:00) [28]

:)
В общем, отсюда вывод, юзаем CreateThread (для фанатов BeginThread).


BiN   (2006-08-28 10:47:00) [29]

Любые высказывания в сторону кажущейся кривости реализации TThread необоснованны и посему - бред.
имо.


Ketmar   (2006-08-28 10:43:00) [30]

> [33] Slym ©   (28.08.06 10:14)
"завернуть" и "перекрыть" -- вещи разные.


Ketmar   (2006-08-28 10:43:00) [31]

> [34] Slym ©   (28.08.06 10:18)
> сработает после выхода из процедуры потока...
и в чём проблема, если всё равно создаётся класс-потомок? нужные переменные -- в поля.

> прерывать синхронный вызов
это что такое? поподробней можно?


Slym   (2006-08-28 10:18:00) [32]

Ketmar ©   (28.08.06 5:00) [32]
обработчик события OnTerminate()

сработает после выхода из процедуры потока...
прерывать синхронный вызов в OnTerminate бессмысленно, т.к. он уже отвалился сам. вот еслиб был OnBeforeTerminate


Slym   (2006-08-28 10:14:00) [33]

Fay ©   (28.08.06 4:51) [31]
Коран не запрещает завернуть Terminate в свой метод

А дальнейшее приведение типа TThread(Thread).Terminate? или сунуть руки в генофонд?


Ketmar   (2006-08-28 05:00:00) [34]

равно как сделать обработчик события OnTerminate().


Fay   (2006-08-28 04:51:00) [35]

2 Slym ©   (28.08.06 4:43) [30]
> Terminate - не виртуальный, как хочется в него
> чегонибудь добавить, например обрыв синхронных вызовов
Коран не запрещает завернуть Terminate в свойметод


Slym   (2006-08-28 04:43:00) [36]

Мой пинок в бочину TThread - Terminate - не виртуальный, как хочется в него чегонибудь добавить, например обрыв синхронных вызовов


Ketmar   (2006-08-27 23:03:00) [37]

> [27] Пусик ©   (27.08.06 22:46)
> асинхронной синхронизации
не надо так шутить на ночь глядя. %-)


y-soft   (2006-08-27 22:59:00) [38]

>Пусик ©   (27.08.06 22:46) [27]

Безопасная реализация достаточна сложна. Начинающему явно не по зубам

Хотя... Можно, например, сделать так:
http://y-soft.comsignal.ru/Delphi/ThreadX_pas.html(просьба сильно не пинать) :)


Пусик   (2006-08-27 22:46:00) [39]


> y-soft ©   (27.08.06 22:40) [26]
> >Ketmar ©   (27.08.06 22:36) [23]
>
> Проблема в том, что не предусмотрено метода Asynchronize
> :)


Ну как раз реализация асинхронной синхронизации не представляет сложности;)


y-soft   (2006-08-27 22:40:00) [40]

>Ketmar ©   (27.08.06 22:36) [23]

Проблема в том, что не предусмотрено метода Asynchronize :)


Страницы:   1 2 3 4

Наверх

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