Главная страница
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
7-52674
UsBall
2001-09-10 00:34
2002.01.17
Воспроизведение AVI - а если хочется ручками прокрутить????


1-52572
Eraser
2001-12-29 00:19
2002.01.17
Поле HELP


1-52544
Kroal
2001-12-28 06:58
2002.01.17
TButton


7-52678
Andey
2001-09-27 19:55
2002.01.17
Определение номера


14-52638
РУС
2001-10-26 17:25
2002.01.17
Спор тносительно HDD