| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Вопрос о TThread |
| Автор: X-Serge 7.10.2002, 20:17 |
| Разъясните, пожалуйста, почему так: Вот есть программа unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls; type TForm1 = class(TForm) Button1: TButton; PB1: TProgressBar; PB2: TProgressBar; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; type TMyThread1 = class(TThread) MyPB : TProgressBar; private { Private declarations } protected procedure DoWork; procedure Execute; override; end; var Form1: TForm1; T1,T2 : TMyThread1; implementation {$R *.DFM} procedure TMyThread1.Execute; begin Synchronize(DoWork); end; procedure TMyThread1.DoWork; var i : integer; begin MyPB.Min:=0; MyPB.Max:=10000; for i:=0 to 10000 do MyPB.Position:=i; end; procedure TForm1.Button1Click(Sender: TObject); begin if Button1.Caption = 'Stop' then begin T1.Terminate; T2.Terminate; Button1.Caption := 'Start'; Exit; end; T1 := TMyThread1.Create(False); T1.MyPB:=PB1; T2 := TMyThread1.Create(False); T2.MyPB:=PB2; Button1.Caption := 'Stop'; end; end. Я надеялся увидеть, что у двух ProgressBar'ов свойство Position будет меняться одновременно (почти одновременно), но это не так, сначала заполняется первый, затем-второй. Почему Или я где-то ошибся. Растолкуйте пожалуйста. Заранее благодарен. |
| Автор: Fantasist 7.10.2002, 23:56 | ||||
Так ты же сам указал, что их надо выполнять синхронно.
То, что DoWork пренадлежит классу TMyThread1 не играет никаой роли - он будет выполнен в основном потоке. То есть Synchronize просто создает очередь из методов, которые нужно выполнить в основном потоке - и они по очереди исполняются. В основном потоке. Так что, не надо мудрить:
|