最近项目的Demo开发使用Delphi 2010,其中使用了多线程开发技术

这里采用VCL的TThread类完成多线程开发,直接使用CreateThread的办法之前用过很多,这里就当练习,试试采用TThread类

TThread类类似VC中的CThread,主要是采用面向对象思想对CreateThread封装了一层,方便多线程的代码编写,线程执行所需要的相关参数可以很方便的设置,线程的操作和线程状态的获取也很方便。至于内部原理,有兴趣的话可以看看VCL源代码,这里就不深入探讨了。

所使用TThread完成多线程开发,可以按照如下步骤进行:

1。从TThread派生一个类,例如TxDerivedThread,并重载Execute函数,多线程的核心代码主要就在该函数中

2。如果在线程执行中需要设置相关执行参数,则可以在派生类TxDerivedThread中添加字段,并使外部调用者有办法修改,比如使用公共字段,设置Setter函数,或者公共Property。这些字段在Execute函数中是可以访问到的,这样就达到了对函数设置执行参数的目的。

但是因为在构造线程类对象时,线程默认会自动执行,而不会挂起,这样外界就没有了设置参数的时机,所以如果需要设置线程执行参数,则需要重载构造函数Create,在其中调用TThread的构造函数,并传递参数True,使线程创建后立即挂起,然后设置相关参数,最后再将线程Resume即可,这样外部就能够控制线程的创建了

例如如下的派生类:

TxKernelBuildThread = class(TThread)

private

main_form: HWND; // 主界面窗口句柄

procedure SetMainForm(value: HWND);

protected

procedure Execute; override;

。。。

public

property MainWnd: HWND write SetMainForm;

。。。

end;

constructor TxKernelBuildThread.Create(suspend: Boolean);

begin

inherited Create(suspend);

end;

在构造时调用者将suspend传递为True,这样线程在创建之初就会挂起,调用者就有机会设置参数了

例如如下的字段设置函数:

procedure TxKernelBuildThread.SetMainForm(value: HWND);

begin

if value = 0 then

begin

Exit;

end;

Self.main_form:=value;

end;

在线程创建之后,就可以设置相关的参数,并在线程执行过程中使用:

例如:

procedure TxKernelBuildThread.Execute;

var

fmt: UnicodeString;

params: UnicodeString;

ret: Integer;

begin

PostMessage(main_form,THREAD_INDEX_START,Self.id,0);

。。。

end;

这样就完成了线程执行参数的传递工作。

至于线程执行结果的获取,也可以采用类似的方法。

3。如果要控制线程的执行,比如挂起,恢复,终止;或者获取线程的状态,比如是否完成,是否挂起等,都有相关的封装函数。

操作函数:Suspend;Resume;Terminate;等

状态获取:ReturnValue;Terminated;Finished;Suspended;等

其他详细函数,可以查看CDN(类似于MSDN,Embarcadero确实比Borland勤快很多了,呵呵)

4。其他的线程同步操作,主要也就是临界区,互斥体,信号量等,这些就不讨论了,比较基本,以后有机会再补上吧。

delphi android 多线程,Delphi中使用TThread进行多线程开发总结相关推荐

  1. python中线程里面多线程_Python中的线程和多线程是什么

    一.线程的概念 一个进程里面至少有一个控制线程,进程的概念只是一种抽象的概念,真正在CPU上面调度的是进程里面的线程,就好比真正在地铁这个进程里面工作的实际上是地铁里面的线程,北京地铁里面至少要有一个 ...

  2. delphi android jni,Delphi使用android的NDK是通过JNI接口,封装好了,不用自己写本地代码,直接调用...

    一.Android平台编程方式: 1.基于Android SDK进行开发的第三方应用都必须使用Java语言(Android的SDK基于Java实现) 2.自从ndk r5发布以后,已经允许完全用C/C ...

  3. android 蓝牙耳机按钮,如何利用android从蓝牙耳机中捕获关键事件_bluetooth_开发99编程知识库...

    将广播侦听器添加到 MEDIA_BUTTON: 你应该在应用程序( 不在清单文件中) 中注册你的广播接收器. 否则,谷歌音乐播放器将捕捉你的广播和船上. 你的IntentFilter 优先级应该高于其 ...

  4. Java多线程编程中Future模式的详解

    转载自 https://www.cnblogs.com/winkey4986/p/6203225.html Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker ...

  5. dateformat线程_Java最佳实践–多线程环境中的DateFormat

    dateformat线程 这是有关使用Java编程语言时的拟议实践的系列文章的第一篇. 所有讨论的主题均基于用例,这些用例源于电信行业关键任务超高性能生产系统的开发. 在阅读本文的每个部分之前,强烈建 ...

  6. Java最佳实践–多线程环境中的DateFormat

    这是有关使用Java编程语言时的拟议实践的系列文章的第一篇. 所有讨论的主题均基于用例,这些用例来自于电信行业的关键任务超高性能生产系统的开发. 在阅读本文的每个部分之前,强烈建议您参考相关的Java ...

  7. vs如何写多线程_java中的多线程的示例

    在讨论多线程之前,让我们先讨论线程.线程是进程中轻量级的最小部分,可以与同一进程的其他部分(其他线程)并发运行.线程是独立的,因为它们都有独立的执行路径,这就是为什么如果一个线程中发生异常,它不会影响 ...

  8. Delphi中线程类TThread实现多线程编程2---事件、临界区、Synchronize、WaitFor……

    接着上文介绍TThread. 现在开始说明 Synchronize和WaitFor 但是在介绍这两个函数之前,需要先介绍另外两个线程同步技术:事件和临界区 事件(Event) 事件(Event)与De ...

  9. 多线程Delphi数据库查询

    By design, a Delphi application runs in one thread. To speed up some parts of the application you mi ...

最新文章

  1. 网络负载均衡相关技术-第四层交换功能
  2. springmvc中url-url-pattern /和/*的区别
  3. sdio接口_多种接口的谷歌Coral模块,总有一款适合您~
  4. 网站截图环境 php,Linux环境下php实现给网站截图的方法
  5. Edge Linking
  6. input image和img button区别
  7. Semantic UI实现一个landing page
  8. 【机器学习基础】支持向量机超参数的可视化解释
  9. win10打开程序响应很慢_Win10系统如何关闭全部无响应进程?
  10. php异步处理任务工具,php异步任务处理: gearman
  11. Linux驱动(4)--Linux的启动流程
  12. 试分别简述udp和tcp的特点_技术帖:污水处理中曝气设备的分类及特点小结
  13. XmlReader 内部使用NameTable
  14. 定位CPU异常抖动---tomcat热部署的坑[转载]
  15. 你还在全量加载iView么?试试手动配一个吧
  16. Luogu2665[USACO08FEB] 连线游戏
  17. C语言的32个基本关键字
  18. Hadoop环境搭建学习之Hive(4)
  19. c语言编程用什么字体,10 款最适合编程的字体
  20. python+matplotlib绘制南丁格尔玫瑰图

热门文章

  1. zabbix wechat 报警
  2. 微信被爆出存在高危漏洞!(快扩散)
  3. Word处理控件Aspose.Words功能演示:在 Java 中将 HTML 文件转换为 Word 文档
  4. Mission Planner初学者安装调试教程指南(APM或PIX飞控)3——连接与烧录
  5. 服务器项目实施计划时间,项目详细实施计划方案_模板-20210804234116.docx-原创力文档...
  6. 隔板法详解(各种方法)
  7. 华为手机助手安卓版_手机资料恢复助手app下载-手机资料恢复助手app安卓版下载v1.0...
  8. Mac新手必看教程—轻松玩转Mac OS
  9. kafka消费者Rebalance机制
  10. 软件构造学习总结(个人观点)