
首先看一个非多线程示例,在执行代码时不能执行其他任何操作(例如拖动表单):
{自定义方法: 在窗体上绘制...} 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现在添加了许多类方法(由类名直接调用的方法),TThread.CreateAnonymousThread()是更有用的方法.

2delphi 多线程下载文件,顾名思义,CreateAnonymousThread用于创建匿名线程对象,其参数是我们需要程中执行的方法.
3. 但是CreateAnonymousThread创建线程后会挂起,您需要手动运行它;下面的Start方法用于唤醒线程.

4. (以前)您还可以使用Resume方法或Suspended属性来唤醒线程(Suspended: = False;);但是将不建议使用它们,现在您应该使用“开始”启动线程.
CreateAnonymousThread的参数类型TProc是匿名方法(引用)delphi 多线程下载文件,因此代码可以缩写为:
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;
执行延迟:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-285017-1.html
我用一句老话说
~
弄个公司上市圈钱