现在, Delphi 的多线程已经非常易用了!
来源:互联网 发布:java中如何用api接口 编辑:程序博客网 时间:2024/05/14 18:42
先看一个非多线程的例子, 代码执行时不能进行其它操作(譬如拖动窗体):
{自定义方法: 在窗体上绘制...}procedure MyMethod;var i: Integer;begin for i := 0 to 500000 do begin Form1.Canvas.Lock; Form1.Canvas.TextOut(10, 10, IntToStr(i)); Form1.Canvas.Unlock; end;end;{调用上面的自定义方法}procedure TForm1.Button1Click(Sender: TObject);begin MyMethod;end;
修改为多线程(只修改一行代码):
procedure MyMethod;var i: Integer;begin for i := 0 to 500000 do begin Form1.Canvas.Lock; Form1.Canvas.TextOut(10, 10, IntToStr(i)); Form1.Canvas.Unlock; end;end;procedure TForm1.Button1Click(Sender: TObject);begin TThread.CreateAnonymousThread(MyMethod).Start; //!!!end;
代码分析:
1、TThread 现在增加了许多 class 方法(直接通过类名调用的方法), TThread.CreateAnonymousThread() 就是比较有用的一个.
2、顾名思义, CreateAnonymousThread 是建立匿名线程对象, 它的参数是我们需要在线程中执行的方法.
3、但 CreateAnonymousThread 建立线程后是挂起的, 需要手动运行它; 后面的 Start 方法就是用来唤醒线程的.
4、(以前)唤醒线程还可以使用 Resume 方法或 Suspended 属性(Suspended := False;); 但它们即将被废弃了, 现在应使用 Start 来启动线程.
CreateAnonymousThread 的参数类型 TProc 是匿名方法(reference), 所以代码可以简写为:
procedure TForm1.Button1Click(Sender: TObject);begin TThread.CreateAnonymousThread( //直接写入方法体 procedure var i: Integer; begin for i := 0 to 500000 do begin Canvas.Lock; Canvas.TextOut(10, 10, IntToStr(i)); Canvas.Unlock; end; end //此处无分号 ).Start;end;
延时执行:
var myThread: TThread;procedure TForm1.FormCreate(Sender: TObject);begin myThread := TThread.CreateAnonymousThread( procedure var i: Integer; begin for i := 0 to 500000 do begin Canvas.Lock; Canvas.TextOut(10, 10, IntToStr(i)); Canvas.Unlock; end; end );end;procedure TForm1.Button1Click(Sender: TObject);begin myThread.Start;end;
- 现在, Delphi 的多线程已经非常易用了!
- 现在, Delphi 的多线程已经非常易用了
- 现在, Delphi 的多线程已经非常易用了!
- 现在, Delphi 的多线程已经非常易用了!
- Delphi 的多线程已经非常易用了
- 现在的table已经被取代了。。?
- [随笔]现在已经不是我们的江湖了
- 我的第一本书现在已经发布了!
- 现在已经到了必需学习C++的时刻了
- 现在Qt的安装已经变得容易了...
- Delphi 2005的30天试用版已经可以下载了。
- msn现在已经越来越慢了
- 现在的网页效果已经能做出如此多的效果了
- 上一次你是来面试的,现在已经是正式员工了
- 可以运行但是结果是错的,问题已经解决了,现在提供一下。
- Memcached现在已经成了服务器架构里不可或缺的一部分
- 看到xml的时候我已经基本非常清楚元素和方法的区别了
- 一段检测当前进程是否已经在运行了的代码,非常实用!
- truncate,delete,drop的异同点
- 测试一下
- ORACLE监控数据库性能的SQL
- c#事务 与SQL事务的解释与举例
- 软件测试学习笔记——单元测试
- 现在, Delphi 的多线程已经非常易用了!
- WPF 中Menu自定义快捷键
- 全面认识Flex弹出窗口用法
- Win7 下ARP绑定
- 程序找BUG
- c#事务与SQL事务的解释与举例
- C#.NET 怎样连接数据库
- C#.NET 怎样连接数据库
- 多线程程序设计(二)