Welcome

首页 / 软件开发 / Delphi / 多线程编程(3)-从CreateThread说起[续]

多线程编程(3)-从CreateThread说起[续]2009-10-11博客园 万一function CreateThread(
lpThreadAttributes: Pointer;
dwStackSize: DWORD;
lpStartAddress: TFNThreadStartRoutine;
lpParameter: Pointer;
dwCreationFlags: DWORD; {启动选项}
var lpThreadId: DWORD
): THandle; stdcall;

CreateThread 的倒数第二个参数 dwCreationFlags(启动选项) 有两个可选值:

0: 线程建立后立即执行入口函数;

CREATE_SUSPENDED: 线程建立后会挂起等待.

可用 ResumeThread 函数是恢复线程的运行; 可用 SuspendThread 再次挂起线程.

这两个函数的参数都是线程句柄, 返回值是执行前的挂起计数.

什么是挂起计数?

SuspendThread 会给这个数 +1; ResumeThread 会给这个数 -1; 但这个数最小是 0.

当这个数 = 0 时, 线程会运行; > 0 时会挂起.

如果被 SuspendThread 多次, 同样需要 ResumeThread 多次才能恢复线程的运行.

在下面的例子中, 有新线程不断给一个全局变量赋随机值;

同时窗体上的 Timer 控件每隔 1/10 秒就把这个变量写在窗体标题;

在这个过程中演示了 ResumeThread、SuspendThread 两个函数.

运行效果图: