Форум: "Основная";
Текущий архив: 2002.01.17;
Скачать: [xml.tar.bz2];
ВнизВопрос по 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.004 c