Главная страница
    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.57 MB
Время: 0.049 c
2-1158913555
Dr. Genius
2006-09-22 12:25
2006.10.08
Защита DFM-файлов


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


15-1158656524
слов нет..
2006-09-19 13:02
2006.10.08
верстка


15-1158217488
k2
2006-09-14 11:04
2006.10.08
"Методология повышения производительности вещественных и ..."


15-1158580296
гастрит
2006-09-18 15:51
2006.10.08
форма





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский