代码

unit theadTest;

interface

uses
  Windows, Classes;

type
  MyThread = class
  private
    FHandle: THandle;
    FSuspended: Boolean;
    FThreadID: THandle;
    FThradNodity: TNotifyEvent;
    FTerminated:  Boolean;
    procedure SetSuspended(Value: Boolean);
  protected
    procedure Execute; virtual;
    property Terminated: Boolean read FTerminated;
  public
    constructor Create(CreateSuspended: Boolean);
    destructor Destroy; override;
    procedure Terminate;
    property Handle: THandle read FHandle;
    property Suspended: Boolean read FSuspended write SetSuspended;
    property ThreadID: THandle read FThreadID;
    property ThradNodity: TNotifyEvent read FThradNodity write FThradNodity;
  end;

implementation

{ MyThread }

function ThreadProc(Param: Pointer): Integer;
begin
  try
    if not MyThread(Param).Terminated then
      try
        MyThread(Param).Execute;
      except
      end;
  finally
    Result := 0;
  end;
end;

constructor MyThread.Create(CreateSuspended: Boolean);
begin
  inherited Create;
  FSuspended := CreateSuspended;
  FHandle := BeginThread(nil, 0, @ThreadProc, Pointer(Self), CREATE_SUSPENDED, FThreadID);
end;

destructor MyThread.Destroy;
begin
  if FHandle <> 0 then CloseHandle(FHandle);
  inherited Destroy;
end;

procedure MyThread.Execute;
begin
  while not Terminated do
  begin
    if Assigned(ThradNodity) then
      ThradNodity(nil);
  end;  
end;

procedure MyThread.SetSuspended(Value: Boolean);
begin
  if Value <> FSuspended then
    FSuspended := Value;
end;

procedure MyThread.Terminate;
begin
  FTerminated := True;
end;

end.

调用
var
  Test1: MyThread;

var
  H: THandle;
begin
  Test1 := MyThread.Create(False);
  Test1.ThradNodity := ThreadNodity;

DuplicateHandle(GetCurrentProcess, Test1.Handle, GetCurrentProcess, @H, DUPLICATE_SAME_ACCESS, TRUE, DUPLICATE_SAME_ACCESS);
  Windows.ResumeThread(H);
//  Windows.ResumeThread(Test1.Handle);
  Windows.ResumeThread(H);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if Assigned(Test1) then
  begin
    if Test1.Handle <> 0 then
      Test1.Terminate;
    Test1.Free;
  end;
end;

思路基本是DELPHI VCL 中Thread的封装思路,主要是测试用

VCL 中先创建一个挂起的线程,然后再调用,调用过程还是有点小复杂,

转载于:https://www.cnblogs.com/chengxin1982/archive/2009/12/14/1623575.html

自己封装线程(Demo)相关推荐

  1. 协程 vs 线程 demo

    2019独角兽企业重金招聘Python工程师标准>>> 协程 vs 线程 demo 博客分类: java package my; import java.util.concurren ...

  2. 易语言多线程Api封装线程挂起恢复销毁

    封装多线程模块-api-线程的挂起和恢复销毁 强制杀死或挂起线程会导致线程正在获取的锁资源无法释放:如果正在操作一块公共内存,可能会导致公共内存被破坏. 一.SuspendThread 在实际环境中, ...

  3. c程序封装linux,Linux系统使用C语言封装线程读写锁

    在Linux平台上已经有现成的线程读写锁pthread_rwlock_t以及相关API,现将这些API封装成与Win32平台上相同的接口,以便于编写跨平台程序.这些API包括pthread_rwloc ...

  4. 【EventBus】事件通信框架 ( 实现几个关键的封装类 | 消息中心 | 订阅注解 | 订阅方法封装 | 订阅对象-方法封装 | 线程模式 )

    文章目录 一.消息中心 二.订阅方法时的注解 三.订阅方法封装 四.订阅对象-方法封装 五.线程模式 一.消息中心 此处暂时只实现一个单例类 , 后续 注册订阅者 , 处理事件传递 , 取消注册订阅者 ...

  5. 【具体使用实例】Rall封装线程(C\C++)

    局部对象就要被逆序销毁. 通过这个性质,创建一个RAII等待线程完成(RAII,Resource Acquisition Is Initialization). 这里是通过一个类实现的.通过简单的封装 ...

  6. 使用C++11封装线程池ThreadPool

    2019独角兽企业重金招聘Python工程师标准>>> 读本文之前,请务必阅读: 使用C++11的function/bind组件封装Thread以及回调函数的使用 Linux组件封装 ...

  7. Flutter Dio的简易封装和demo

    flutter_net_demo 一个简单的flutter dio的封装, 包括: 日志打印, 网络进度, 返回json转bean, get post upload方法的封装, 简易可直接运行的dem ...

  8. python封装线程类(启动、终止、查看线程状态)

    文章目录 一.简单说明 二.实现步骤 三.测试 一.简单说明 将启动.终止和查看线程状态的方法封装成类 声明时传入要启动的方法 通过 start.stop 和 state 执行启动.终止 和 查看状态 ...

  9. 易语言多线程封装线程启动返回句柄

    封装多线程模块-线程启动 • 1.CreateThread • 2.线程_启动_句柄() • 3.线程_启动_逻辑() • 4.线程句柄 • 5.线程ID • 6.易语言SHCreateThread ...

最新文章

  1. Java String split 使用详解、split 方法存在的一些坑
  2. Linux内核探讨-- 第六章
  3. BZOJ 2734 [HNOI2012]集合选数 (状压DP、时间复杂度分析)
  4. Java volatile关键字原理解剖
  5. HTML5数据库建模,HTML5的五种客户端离线存储方案
  6. android电视不能root权限,有谁知道安卓电视root权限获取方法?
  7. ie11浏览器For win7 x86 官方下载 V9600 官方版
  8. 海思HI3536 H265解码处理器简介
  9. oracle执行计划之执行顺序(一看就会!)
  10. 水经注叠加cad_如何下载矢量格式的CAD等高线
  11. 201671030118 词频统计软件项目报告
  12. 异数OS国产CPU平台移植项目需求分析
  13. word论文公式加点
  14. Windows设置电脑每天自动重启
  15. CAD镜像一个实体对象
  16. 亚马逊美国站店铺个人如何开店?亚马逊美国站卖服装好做吗?
  17. Unity自动驾驶仿真
  18. EasyPlayer-rtsp播放器中码率及帧率统计的实现方法
  19. 三菱四节传送带控制梯形图_基于三菱FX-2N系列PLC的四节传送带模拟控制设计
  20. typeC PD是什么含义

热门文章

  1. 如何给你的web项目加入log4net支持
  2. 谷歌AMP和百度MIP,你选哪个?
  3. 如何在IAR工程中创建和使用模板
  4. GitHub 上值得关注的 iOS 开源项目
  5. ***CSS魔法堂:选择器及其优先级
  6. 不当免费技术支持的10种方法
  7. Linux下MONO执行C#程序
  8. VSTS Code Analysis 错误 CA1014 CLSCompliantAttribute 及Suppress Message (镇压Code Ananlysis)...
  9. KZWFoudation系列之Router的设计
  10. MySQL3次导入报错解决!