理解线程的同步器,学习过程中... (10分)

  • 主题发起人 主题发起人 yanyading
  • 开始时间 开始时间
Y

yanyading

Unregistered / Unconfirmed
GUEST, unregistred user!
我们新手经常在线程里面放上可以操作 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 10do
Mythrd := TMyThrd.Create(False);
end;

-----------------------------------------------
线程单元
-----------------------------------------------
unit Unit2;
interface
uses
Classes, SysUtils;
type
TMyThrd = class(TThread)
private
Val: Integer;
procedure Disp;
protected
procedure Execute;
override;
end;

implementation
uses Unit1;
procedure TMyThrd.Execute;
var
I: Integer;
begin
For I := 1 to 1000do
begin
Val := I;
Synchronize(Disp);
//Form1.Caption := IntToStr(Val);
经常在线程里面放上可以操作MainForm的代码
end;
end;

procedure TMyThrd.Disp;
// 显示值
begin
Form1.Caption := IntToStr(Val);
end;
 
it's block for my understanding on thread, thanks...
 
应该是这样的,还应该看一下com中的线程模型,
 
在执行线程中的程序时(当i=90000时),其它的指令是没办法帮你运行的,给人一种没有动的感觉,
而直接用CreateThread函数则会有不同的感受
 
后退
顶部