AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > C++

C++ Builder 定义线程对象

51自学网 http://www.51zixue.net

第7章 编写多线程应用程序

VCL提供了一些用于简化编写多线程应用程序的对象。多线程应用程序是包含数个同时执行的线程的应用程序。在使用多线程应用程序时需要仔细地考虑,它可通过以下途径来增强程序的功能:

· 避免瓶颈。若程序中只有一个线程,那么有时程序可能会必须停止其他所有的动作以等待某一费时的进程的执行,如访问磁盘文件,与其他机器通信,或显示多媒体内容。在该进程完成前,CPU始终是空闲的。若存在多个线程,应用程序就能在某一个线程等待费时进程的结果时,继续执行其他独立的线程。
· 组织程序。通常,可以将程序的行为组织为几个功能独立的并行进程。使用线程可同步执行每个并行进程中的单段代码。使用线程还可指定多个程序任务的优先级,以便把更多CPU时间分配给更重要的任务。

· 多道处理。若系统以多个处理器运行程序,则可通过将工作分成一些线程并让它们在多个处理器同步运行而改善效率。

注意即使硬件支持,也并不是所有的操作系统都能实现真正的多道处理。如Windows95就只是模拟多道处理,即使有硬件的支持也是如此。

7.1 定义线程对象
对于大多数的应用程序来说,可在应用程序使用线程对象来表示执行线程。线程对象通过封装使用线程所需的内容简化了多线程应用程序的编写。

注意线程对象不允许控制线程堆栈的大小或其安全属性。若需要控制这些,必须使用WindowsAPI的CreateThread或BeginThread函数。不过,即使是使用WindowsThreadAPI调用或BeginThread,仍然可从一些同步线程对象或在“7.2节”中描述的方法中受益。关于使用
CreateThread或BeginThread的详细信息,请参阅Windows联机帮助。要在应用程序中使用线程对象,必须创建TThread的一个新的派生类。为创建TThread的一个派生类,可从主菜单中选择File|New。在新对象对话框中,选择ThreadObject。系统会提示为新线程对象提供类
名。在提供名字之后,C++Builder创建一个新的.cpp和头文件以实现线程。

注意与大多数需要提供类名的对话框不同,NewThreadObject对话框不会自动在你提供的类名前加上字母T。

自动生成的.cpp文件中包含关于新线程对象的代码框架。若将线程命名为TMyThread,则.cpp文件
如下所示:


在这个文件中,必须自行在构造函数及Execute方法中添加代码。下列各节将介绍这些步骤。

7.1.1 初始化线程
使用构造函数来初始化新线程类。在这里可为线程分配缺省的优先级,并可指定线程是否在执行完成后自动释放。

1.指定一种缺省优先
优先级是指当操作系统在应用程序的所有线程中分配CPU时间片时,指示线程可得到多少。使用高优先级线程来处理重要的任务,而使用低优先级线程来执行其他任务。要指定线程对象的优先级,可设置其Priority属性。Priority属性值沿表7-1中的七个点变化:


2.指示何时释放线程
通常,当线程完成其操作,就可简单地被释放。这种情况,最方便的就是让线程对象释放其本身。为此,应将FreeOnTerminate属性设为true。
有时线程的终止需与其他线程协调。例如,可在一个线程中等待另一个线程返回值后再进行其他动作。所以,在线程收到返回值前可能不想释放另一个线程。处理这种情况,可通过设置FreeOnTerminate属性为false,然后在线程中显式释放另一个线程。

<

 

 

 
上一篇:使用&nbsp;C++&nbsp;Builder&nbsp;创建应用程序  下一篇:将声音和/或视频剪辑加入应用程序