如何创建VCL窗口应用程序之创建多线程应用(定义与初始化线程)

Posted ganders

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何创建VCL窗口应用程序之创建多线程应用(定义与初始化线程)相关的知识,希望对你有一定的参考价值。

  • 创建多线程应用首先要定义线程对象

1)选择 File > New > Other > Delphi Projects > Delphi Files 或者 File > New > Other > C++Builder Files ,然后双击Thread Object 图标。新建线程对象对话框将会显示出来。

技术图片

2)然后给类命名,例如,TMyThread。

3)Named Thread前的复选框是可选的,如果勾选了,需要给线程命名,好处就是在调试的时候可以根据命名的线程名称更容易地跟踪线程。

4)单击OK。

编辑器会自动生成线程对象代码框架,生成代码类似下文。

技术图片

如果勾选了Named Thread前的复选框,例如给线程命名为TMyThreadName,则会自动生成调用NameThreadForDebugging过程(procedure)的代码,如下所示,当然,你可以修改字符串内容。

技术图片

  • 然后初始化线程对象

1、指定默认线程优先级

     1)从下表中给线程指定一个线程优先级;将高优先级指定给时间紧迫的任务,低优先级指定给其它任务。

Value

Priority

tpIdle

被指定该优先级的线程只有当系统空闲时才会执行,Windows系统不会通过中断其它线程的方式来执行该优先级的线程。

tpLowest

被指定该优先级的线程比标准优先级低两个级别。
tpLower 被指定该优先级的线程比标准优先级低一个级别。

tpNormal

参考标准优先级。
tpHigher 被指定该优先级的线程比标准优先级高一个级别。

tpHighest

被指定该优先级的线程比标准优先级高两个级别。

tpTimeCritical

被指定该优先级的线程拥有最高级别优先级。

    警告:提升密集型操作的线程优先级会导致应用程序中的其他线程一直处于渴求状态,因此仅将优先级提升应用于需要花费时间等待外部事件的线程。

    下方代码展示了一个优先级较低的线程,该线程总是在后台执行而不干扰其它应用的运行

技术图片

2、指示线程何时释放

    通常情况下,当线程执行完操作后就会被释放。最简单的方式就是让线程释放它本身,前提是将FreeOnTerminate的属性设置为True。

    但是,有时候一个线程的终止需要其它线程的协同。例如,你可能想要从某个线程得到一个返回值,然后才会在其他线程中执行操作,这时候你肯定不想在第二个线程未得到返回值之前就释放第一个线程,此时你可以将FreeOnTerminate设置为False,然后在第二个线程中显式释放第一个线程。

以上是关于如何创建VCL窗口应用程序之创建多线程应用(定义与初始化线程)的主要内容,如果未能解决你的问题,请参考以下文章

DIOCP之编写第一个应用程序

delphi 多线程之 TEvent 和 TLightweightEvent

delphi 多线程之System.TMonitor (续一)

创建一个有声音的 VCL 按钮组件

正确关闭使用 ATL 在单独线程上创建的窗口

java多线程