在IParam中传递Self。
CM_EXECPROC
图11-2 Synchronize()的原理
3. 用消息来同步
可以利用在线程之间使用消息同步以替代T T h r e a d . S y n c h r o n i z e ( )方法。可以使用A P I函数SendMessage() 或P ostMessage()来发送消息。例如,下面是一段用来在一个线程中设置另一个线程中的编辑框文本的代码:11.2.5 一个演示程序
为了充分地说明在D elphi中的多线程编程,下面介绍一个
演示程序。可以把它存为E ZThrd。这个演示程序上有一个文本编辑器、一个按钮、一个编辑框和若干个标签,如图11 -3所示。
图11-3 EZThrd程序的主窗体
此程序的主窗体单元代码在清单11 -2中。
清单11-2 MAIN.PA S单元
当单击按钮创建附属线程后,仍然可以在多行文本编辑器中输入文本,就好像附属线程不存在一样。当线程代码执行完后,计算结果将会显示在编辑框中。11.2.6 优先级和时序安排
正如前面提到的,操作系统会负责为每个线程分配C PU时间。一个线程所分配到的C PU时间主要取决于该线程的优先级,而线程的优先级又取决于进程的优先级类和线程本身的相对优先级。
1. 进程的优先级类
进程的优先级类用来描述一个进程的优先程度。Wi n32支持四种不同的优先级类:I dle、N ormal、High 和R ealtime。其中,N ormal是默认的优先级。在Wi ndows单元中,每一种优先级类都对应着一个标志。当要进行进程的优先级设置时,可以用一种优先级类与C reateProcess()的参数d wCreationFlags进行或操作。另外,还可以动态地为一个已有的进程调整优先级类。每个优先级类也对应一个数字,值在4~ 24之间。
注意
在Windows NT/2000下,要有特殊的权限才能修改进程的优先类。默认的设置允许进程
设置它们的优先级类,但是,这些都可以由系统管理员来关闭,尤其是在高负载的Wi ndowsNT/2000服务器上。
表11 -1列出了所有的优先级类以及对应的标志和数值。
类I d
l
e
Below normal①N ormal
Above norma