Вниз
Скачать: CL | DM;

Вопрос по TThread   Найти похожие ветки 

 
panov ©   (2001-12-30 13:13) [14]

Те команды и операторы, которые выполня.тся в процедуре, указанной в Synchronize, выполняются в основном потоке.
Свой код, который необходимо выполнять в потоке, весь прописываешь в Execute, а в процедуре, работающей в Synchronize, только производишь обновления, которые выполняются в основном потоке, и, естественно блокируют основной поток.
Т.е.:
procedure MyThread.Execute;
begin
...
// Здесь идет длительная обработка.
...
// После окончания расчетов выполняешь
Synchronize(Capacity);

В Capacity пишешь, например:

MainForm.Label5.Caption := ....
//На этом твой поток завершает работу
end;


Непонятно, зачем тебе ждать завершения первого потока, чтобы выполнить второй.

Как правило, потоки выполняются параллельно.
Если же тебе нужно дождаться, пока один поток работает, и после этого запустить второй поток, причем первый недолжен блокировать основную форму, то можно выполнить такой код:

В Capacity пишешь:
begin
Label5.Caption := .... //Необязательно.
PostMessage(Form1.Handle, WM_ENDMYTHREAD1,1);
//или
PostMessage(Form1.Handle, WM_ENDMYTHREAD2,2);
//Только здесь нужно неким образом определить, какой поток завершил работу - первый или второй и соответствующее сообщение посылать
end;

В основной форме описываешь процедуру обработки сообщения:

в const (до определения класса type TForm1=class ...)
const
WM_BASE = WM_USER+1;
WM_ENDMYTHREAD = WM_BASE+1;
в public в определении формы добавляешь
procedure onWM_ENDMYTHREAD(msg: TMessage); Message WM_ENDMYTHREAD;
//посмотри точное определение в процедуры HELP по ключевому слову Message (у меня Delphi нет под рукой)
в секции implementation определяешь эту процедуру
procedure TForm1.onWM_ENDMYTHREAD(msg: TMessage);
begin
if msg.lparam = 1 then TMyThread.Create; //запуск второго потока.
end;

За точный синтаксис не ручаюсь. Вот Delphi сегодня установлю, тогда могу тебе коротенький пример прислать...




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

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.006 c
1-52561
DarT
2001-12-28 12:09
2002.01.17
Сворачивание в TaskBar


14-52640
Alexandr
2001-11-21 10:20
2002.01.17
IE6 и незапуск файлов


3-52461
Yuvich
2001-12-14 12:07
2002.01.17
Кому интересен полнотекстовый поиск в Oracle


3-52496
Шавлюк Евгений
2001-12-13 00:27
2002.01.17
Использование ClientDataSet


1-52606
Yaro
2001-12-30 14:11
2002.01.17
TRegistry.SaveKey - ???




   Наверх