Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.08;
Скачать: CL | DM;

Вниз

Остановка потока   Найти похожие ветки 

 
isasa ©   (2006-08-28 10:58) [40]

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


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


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

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


 
y-soft ©   (2006-08-28 11:01) [42]

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

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


 
BiN ©   (2006-08-28 11:02) [43]


> 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. Не начинающие же.


 
Ketmar ©   (2006-08-28 11:06) [44]

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


 
y-soft ©   (2006-08-28 11:08) [45]

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

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


 
Ketmar ©   (2006-08-28 11:10) [46]

> [45] y-soft ©   (28.08.06 11:08)
конечно, выбор есть. но если кто-то не любит селёдку, это не причина ругать повара?


 
y-soft ©   (2006-08-28 11:11) [47]

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


Unhandled exceptions еще как живут и побеждают с криком: "Ваше приложение выполнило недопустимую операцию и будет закрыто" :)


 
Ketmar ©   (2006-08-28 11:12) [48]

> [47] y-soft ©   (28.08.06 11:11)
а мы их напугаем SetUnhandledExceptionFilter()"ом. %-)


 
y-soft ©   (2006-08-28 11:12) [49]

>Ketmar ©   (28.08.06 11:10) [46]

Не повара, а блюдо


 
y-soft ©   (2006-08-28 11:14) [50]

>Ketmar ©   (28.08.06 11:12) [48]

а мы их напугаем SetUnhandledExceptionFilter()"ом. %-)

Ну, ежели охота в такие глубины лезть :)


 
Slym ©   (2006-08-28 12:02) [51]

Ketmar ©   (28.08.06 10:43) [35]
> прерывать синхронный вызов
это что такое? поподробней можно?

procedure TxThread.Execute;
begin
 while not terminated do
   Event.WaitFor(INFINITY);
end;

еслиб procedure TThread.Terminate; был virtual яб его

procedure TxThread.Terminate; override;
begin
 inherited;
 Event.Signal;
end;


 
Ketmar ©   (2006-08-28 12:11) [52]

ну напиши свой класс. там кода-то...


 
Slym ©   (2006-08-28 14:05) [53]

сделай так чтоб этот код выполнялся менее секунды :)
ограничения:
1. публиковать Event низя, или иначе управлять им не из TxThread
program Project1;
{$APPTYPE CONSOLE}
uses classes,SyncObjs,Windows;
type
 TxThread=class(TThread)
 private
   Event:TSimpleEvent;
 protected
   procedure Execute;override;
 public
   constructor Create(CreateSuspended: Boolean);
   destructor Destroy; override;
 end;

constructor TxThread.Create(CreateSuspended: Boolean);
begin
 Event:=TSimpleEvent.Create;
 inherited;
end;

destructor TxThread.Destroy;
begin
 inherited;
 Event.Free;
end;

procedure TxThread.Execute;
begin
 repeat
   Event.WaitFor(60000);
   writeln("loop :)");
 until terminated;
end;

var x:TxThread;
begin
 x:=TxThread.Create(false);
 sleep(0);
 x.Free;
 writeln("Final!");
end.


 
Ketmar ©   (2006-08-28 14:32) [54]

> [53] Slym ©   (28.08.06 14:05)
и не подумаю. ибо если мне нужны такие условия, то я буду думать над переделкой кода, а не над тем, как вилами геморрой лечить. %-)


 
Slym ©   (2006-08-29 04:34) [55]

Ketmar ©   (28.08.06 14:32) [54]
ибо если мне нужны такие условия

ИнкапсЮляция батенька :)


 
Ketmar ©   (2006-08-29 09:47) [56]

> [55] Slym ©   (29.08.06 04:34)
нет. апофигеоз. %-)


 
Destroyer ©   (2006-08-30 16:11) [57]

Такой вопрос. Нужно выполнять действие, в данном случае деактивировать кнопку на главной форме, при каждом завершении потока. Что-то типа события OnTerminate. Подскажите как такое осуществить.


 
Dmitrij_K   (2006-08-30 16:14) [58]

OnTerminate не подходит?


 
Destroyer ©   (2006-08-30 16:21) [59]

А как с OnTerminate?
Вот решил эту проблему так:
...
 public
 destructor Destroy; override;
...
destructor TimerThread.Destroy;
begin
inherited;
MainForm.StopOperationButton.Enabled:=false;
end;


 
Reindeer Moss Eater ©   (2006-08-30 16:22) [60]

Какого только бреда не придумают, только чтобы не думать головой.


 
Dmitrij_K   (2006-08-30 16:25) [61]

Thread.OnTerminate := твоё
сникерсни Ж)


 
Reindeer Moss Eater ©   (2006-08-30 16:26) [62]

Создай поток, передай ему хендл главного окна.
Если собираешься прибивать поток снаружи сохрани хендл потока.
В конце Execute пошли сообщение хендлу окна.
В обработчике сообщения главного окна прими сообщение.
И все.


 
y-soft ©   (2006-08-30 17:51) [63]

>Reindeer Moss Eater ©   (30.08.06 16:26) [62]

С Вашего позволения дополню

Именно главного окна (Application.Handle), а не главной формы, и обрабатывать в Application.OnMessage... И использовать PostMessage


 
Reindeer Moss Eater ©   (2006-08-30 18:42) [64]

разницы-то вроде никакой


 
y-soft ©   (2006-08-30 20:21) [65]

>Reindeer Moss Eater ©   (30.08.06 18:42) [64]

Из условия не видно, что пользователь не может произвести действия, которые вызовут, например,  RecreateWnd для главной формы, и в конечном итоге изменят хендл ее окна. С окном приложения такого точно не произойдет



Страницы: 1 2 вся ветка

Текущий архив: 2006.10.08;
Скачать: CL | DM;

Наверх




Память: 0.59 MB
Время: 0.05 c
2-1159103648
Серый
2006-09-24 17:14
2006.10.08
Текстовые поля


1-1156694491
Still Swamp
2006-08-27 20:01
2006.10.08
Баг с TMainMenu


2-1158576037
stfu
2006-09-18 14:40
2006.10.08
Создание графиков в Excel e


6-1147542695
RUNaum
2006-05-13 21:51
2006.10.08
Распаковать gzip-архив


3-1154862962
serko
2006-08-06 15:16
2006.10.08
Найти далее и др.