多线程里的 Synchronize 请教!
时间:2011-11-03
来源:互联网
因为一个工程项目,所以我像请教下多线程的 一个技巧!
procedure MyThread.SynchroEvent1;
var
WaitReturn : DWord ;
I:Integer;
begin
For I:=0 to 99999999 do Form1.Label3.Caption :=Inttostr(I);
end;
constructor MyThread.Create(lbl:TLabel;sleepSec:Integer); //参数传递
begin
FLabel:=lbl;
FSleepDec:=sleepSec;
FreeOnTerminate:=True; //让线程终止是触发OnTerminate事件
inherited Create(True);//不立即执行,只有调用resume才开始
end;
procedure MyThread.Execute;
var
i:Integer;
begin
for i:=0 to 1000 do begin
if Terminated then Break;
FLabel.Caption:=IntToStr(i);
Sleep(FSleepDec);
SynchroEvent1;
end;
end;
如果在Synchronize里使用了循环的话就会使程序卡死,工程里必须同步并且有循环!我像请教大家如何解决?
procedure MyThread.SynchroEvent1;
var
WaitReturn : DWord ;
I:Integer;
begin
For I:=0 to 99999999 do Form1.Label3.Caption :=Inttostr(I);
end;
constructor MyThread.Create(lbl:TLabel;sleepSec:Integer); //参数传递
begin
FLabel:=lbl;
FSleepDec:=sleepSec;
FreeOnTerminate:=True; //让线程终止是触发OnTerminate事件
inherited Create(True);//不立即执行,只有调用resume才开始
end;
procedure MyThread.Execute;
var
i:Integer;
begin
for i:=0 to 1000 do begin
if Terminated then Break;
FLabel.Caption:=IntToStr(i);
Sleep(FSleepDec);
SynchroEvent1;
end;
end;
如果在Synchronize里使用了循环的话就会使程序卡死,工程里必须同步并且有循环!我像请教大家如何解决?
作者: jiangjunad 发布时间: 2011-11-03
第一,不要直接在线程里操作VCL。
第二,把要同步的部分这么使用Synchronize(SynchroEvent1)
第三,SynchroEvent1应该简单,只包括循环内的部分就可以了。在Execute里加上For I:=0 to 99999999 do Synchronize(SynchroEvent1);
第四,循环很快的,不要每次都显示,SynchroEvent1里面if(i mod 13243=0) then Form1.Label3.Caption :=Inttostr(I);就可以了。
第二,把要同步的部分这么使用Synchronize(SynchroEvent1)
第三,SynchroEvent1应该简单,只包括循环内的部分就可以了。在Execute里加上For I:=0 to 99999999 do Synchronize(SynchroEvent1);
第四,循环很快的,不要每次都显示,SynchroEvent1里面if(i mod 13243=0) then Form1.Label3.Caption :=Inttostr(I);就可以了。
作者: lhylhy 发布时间: 2011-11-03
把i设成MyThread的成员变量。
作者: lhylhy 发布时间: 2011-11-03
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28