多线程里的 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版激活秘钥/序列号/激活码推荐 附激活工具 office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具阅读:74 
-   如何安装mysql8.0 如何安装mysql8.0阅读:31 
-   Word快速设置标题样式步骤详解 Word快速设置标题样式步骤详解阅读:28 
-   20+道必知必会的Vue面试题(附答案解析) 20+道必知必会的Vue面试题(附答案解析)阅读:37 
-   HTML如何制作表单 HTML如何制作表单阅读:22 
-   百词斩可以改天数吗?当然可以,4个步骤轻松修改天数! 百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!阅读:31 
-   ET文件格式和XLS格式文件之间如何转化? ET文件格式和XLS格式文件之间如何转化?阅读:24 
-   react和vue的区别及优缺点是什么 react和vue的区别及优缺点是什么阅读:121 
-   支付宝人脸识别如何关闭? 支付宝人脸识别如何关闭?阅读:21 
-   腾讯微云怎么修改照片或视频备份路径? 腾讯微云怎么修改照片或视频备份路径?阅读:28 















