Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.01.17;
Скачать: 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 вся ветка

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

Наверх




Память: 0.47 MB
Время: 0.011 c
3-52488
andey
2001-12-14 21:26
2002.01.17
Сколько запрашивать


14-52664
Ray_Parker
2001-11-13 13:44
2002.01.17
Вопрос по медиа программированию


3-52481
Дима
2001-12-14 19:38
2002.01.17
Как обойтись без BDE


3-52503
Вит
2001-12-15 16:35
2002.01.17
Как разбить БД в InterBase на два файла?


1-52539
Yuri Btr
2001-12-27 17:13
2002.01.17
Размер файла