以下内容仅供初学者参考
看到有的同学对Delphi的线程认识不够深,特开一贴给同学们讲讲。
主要给出两种常用的线程形式。
1、长等待型线程示例,等待命令,执行不定长的工作,但每个工作的时间不会太长。
2、长工作型线程示例,执行一个很长时间的工作,但可以很快响应取消操作。
注:对于在线程中取消存储过程的执行仍然无解
以下程序所用的知识为:消息机制以及常用的API函数
主程序Unit1
-
Delphi(Pascal) code
-
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,LongWaitTrd; type TForm1 = class(TForm) btnSetTask: TButton; btnExitThd: TButton; btnCreateTrd: TButton; procedure btnSetTaskClick(Sender: TObject); procedure btnCreateTrdClick(Sender: TObject); procedure btnExitThdClick(Sender: TObject); private LongWaitThread:TLongWaitTrd; procedure OnThreadMessage( var Message: TMessage); message WM_USER + 2000 ; public { Public declarations } end ; var Form1: TForm1; implementation { $R *.dfm } procedure TForm1.btnSetTaskClick(Sender: TObject); begin if (LongWaitThread <> nil ) then PostThreadMessage(LongWaitThread.ThreadID,WM_USER + 1000 , 0 , 0 ); end ; procedure TForm1.btnCreateTrdClick(Sender: TObject); begin LongWaitThread: = TLongWaitTrd.Create(true); LongWaitThread.MainWin: