我们新手经常在线程里面放上可以操作 Main Form 的代码而不使用 “同步器”(Synchronize),据说这样很容易出问题,所以现在我又开始从新使用同步器了,但是对它的理解似乎需要各位的认同:Delphi 帮助里面说:TThread.Synchronize - Executes a method call within the main VCL thread.
那么可不可以这么理解呢?当我建立了10个线程的时候,唯一仅有主线程会调用各自线程的“同步器”,这样就有很多的“同步器”等着要工作,但是每一个同步器在工作的时候,它是这样工作的:
1. 主线程说:“所有的人听了!我现在同步一个线程,其他的人等着,因为我不是线程安全的!”,说完便“由主线程调用同步器”(是不是主线程调用的哦?!)...
2. 第一个线程的“同步器”做完了,现在是第二个线程的“同步器”,其他人(线程)也还是只有等着,虽然是多线程的程序,但是同步器工作的时候,整个程序还是单线程的执行“同步器”,仅仅是CPU分了许多时间片出来运行多线程而以...-----------------------------------------------
调用部分
-----------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
  Mythrd: TMyThrd;
  Counter: Integer;
begin
  for Counter := 1 to 10 do
  Mythrd := TMyThrd.Create(False);
end;-----------------------------------------------
线程单元
-----------------------------------------------
unit Unit2;interfaceuses
  Classes, SysUtils;type
  TMyThrd = class(TThread)
  private
    Val: Integer;
    procedure Disp;
  protected
    procedure Execute; override;
  end;implementationuses Unit1;
procedure TMyThrd.Execute;
var
  I: Integer;
begin
  For I := 1 to 1000 do
  begin
  Val := I;
  Synchronize(Disp);
  //Form1.Caption := IntToStr(Val); 经常在线程里面放上可以操作MainForm的代码
  end;
end;procedure TMyThrd.Disp;     //  显示值
begin
  Form1.Caption := IntToStr(Val);
end;