注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

鑫淼梦园的博客

圆你的梦想 从这里开始

 
 
 

日志

 
 

多线程编程, 这三个方法够我用了  

2013-06-22 11:46:23|  分类: delphi xe4 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
有一段多线程的程序需要完善, 捋了一遍 XE4 中关于多线程的源码, 发现有这三个类方法就足够我用了, 暂时结束学习.

TThread.CreateAnonymousThread(); //普通
TThread.Queue();                 //队列
TThread.Synchronize();           //VCL 同步


FeedBack:
#1楼  2013-06-11 15:44 feiyang  
万老师,能给一些例子说说这个几个方法的具体使用?
  
#3楼  2013-06-13 16:53 Minol  
问一下,用CreateAnonymousThread创建的线程,要如何才能知道线程执行结束了?因为 CreateAnonymousThread 在D2010中用不了,所以现在没法调试
  
#4楼[楼主]  2013-06-13 17:28 万一  
@Minol
线程有个结束事件: OnTerminate, 当然也可以在自定义的线程过程中想办法.
1
2
3
4
5
6
7
var
  MyThread: TThread;
begin
  MyThread := TThread.CreateAnonymousThread(...);
  MyThread.OnTerminate := ...
  MyThread.Start;
end;
  
#5楼  2013-06-21 14:32 cigarette  
万老师,能给个多线程+任务队列的例子吗?
  
#6楼[楼主]  2013-06-21 15:32 万一  
@cigarette
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//准备让线程调用的测试函数
procedure Draw(aCanvas: TCanvas; X,Y: Integer; aCount: Integer = 100000);
var
  i: Integer;
begin
  for i := 0 to aCount do
  begin
    aCanvas.Lock;
    aCanvas.TextOut(X, Y, IntToStr(i));
    aCanvas.Unlock;
  end;
end;
 
//同步执行
procedure TForm1.Button1Click(Sender: TObject);
begin
  TThread.CreateAnonymousThread(procedure begin Draw(Canvas, 50, 10); end).Start;
  TThread.CreateAnonymousThread(procedure begin Draw(Canvas, 50, 30); end).Start;
  TThread.CreateAnonymousThread(procedure begin Draw(Canvas, 50, 50); end).Start;
  TThread.CreateAnonymousThread(procedure begin Draw(Canvas, 50, 70); end).Start;
  TThread.CreateAnonymousThread(procedure begin Draw(Canvas, 50, 90); end).Start;
end;
 
//顺序执行
procedure TForm1.Button2Click(Sender: TObject);
begin
  TThread.Queue(nil, procedure begin Draw(Canvas, 150, 10); end);
  TThread.Queue(nil, procedure begin Draw(Canvas, 150, 30); end);
  TThread.Queue(nil, procedure begin Draw(Canvas, 150, 50); end);
  TThread.Queue(nil, procedure begin Draw(Canvas, 150, 70); end);
  TThread.Queue(nil, procedure begin Draw(Canvas, 150, 90); end);
end;
  评论这张
 
阅读(416)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017