delphi 线程教学第四节:多线程类的改进

Posted 晓不得2013

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi 线程教学第四节:多线程类的改进相关的知识,希望对你有一定的参考价值。

第四节:多线程类的改进
 
1.需要改进的地方
 
a) 让线程类结束时不自动释放,以便符合 delphi 的用法。即 FreeOnTerminate:=false;
b) 改造 Create 的参数,让它适合访问 COM 组件。如:在线程时空中能够创建 TAdoConnection;
c) 设计一个接口能将一个过程( procedure )塞到线程时空中去运行的功能,这样,不必每次重载 Execute 函数。
d) 设计一个输出信息的接口
 
下一节,将讲解如何用多个线程同时执行相同的任务
 
改进后的多线程类
本例源码(delphi xe8版本)下载: FooThread.Zip
 
unit uFooThread;
interface
uses
  System.Classes, System.SyncObjs;
 
type
  TOnMsg = procedure(AMsg: stringof object// 定义一个用于输出信息的事件
 
  // 很多编程资料推荐在 String 参数前面加 const ,以提高效率
  // 我的理由是为了代码美观。如果有多个参数,加上 const 参数太长了。
  // 在以后的使用中,请自己斟酌是否加 const 。
  TFooThread = class(TThread)
  private
    FEvent: TEvent;
    FCanAccessCom: Boolean;
    FRunningInThread: TThreadMethod;
    // TThreadMethod 的定义是 TThreadMethod = Procedure of object;
    // 意为这个 Procedure 是写在一个类中的。
    // 在其它编程语言中,TThreadMethod 被称为函数指针。
    // FRunningInThread 它用来保存将要在线程中运行的代码或 Procedure
    procedure DoExecute;
  protected
    // protected 段中定义的变量与函数,允许在子类中调用。
    procedure Execute; override;
    procedure DoOnStatusMsg(AMsg: string);