⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 15.2 线程创建函数.txt

📁 网上第一本以TXT格式的VC++深入详解孙鑫的书.全文全以TXT格式,并每一章节都分了目录,清晰易读
💻 TXT
字号:
15.2 线程创建函数
创建线程可以使用系统提供的 API函数: CreateThread来完成,该函数将创建一个线
程。

该函数的原型声明如下所述: 
HANDLE CreateThread( 
LPSECURITY_ATTRIBUTES lpThreadAttributes , 
DWORD dwStackSize, 
LPTHREAD_START_ROUTINE lpStartAddress , 
LPVOID lpParameter, 
DWORD dwCreationFlags , 
LPDWORD lpThreadid
下面具体介绍 CreateThread函数的每个参数: 
. lpThreadAttributes 
指向 SECURITY ATTRIBUTES结构体的指针,关于这个结构体在前面己经讲过了,这里可以为其传递 
NULL,让该线程使用默认的安全性。但是,如果希望所有的子进程能够继承该线程对象的句柄,就
必须设定一个 SECURITY_ATTRIBUTES结构体,将它的 blnheritHandle成员初始化为 TRUE。 
. dwStackSize 
设置线程初始拢的大小,即线程可以将多少地址空间用于它自己的拢,以字节为单位。系统会把这
个参数值四舍五入为最接近的页面大小。页面是系统管理内存时使用的内存单位,不同 CPU其页面
大小不同, x86使用的页面大小是 4阻。当保留地址空间的一块区域时,系统要确保该区域的大小
是系统页面大小的倍数。例如,希望保留lOKB的地址空间区域,系统会自动对这个请求进行四舍五
入,使保留的区域大小是页面大小的倍数,在 x86平台下,系统将保留一块 12KB的区域,即 4KB
的整数倍。如果这个值为 0,或者小于默认的提交大小,那么默认将使用与调用该函数的线程相同
的战空间大小。 
. lpStartAddress 
指向应用程序定义的 LYTHREAD-START-ROUTINE类型的函数的指针,这个函数将由新线程执行,表明
新线程的起始地址。我们知道 main函数是主线程的入口函数,同样地,新创建的线程也需要有一个
入口函数,这个函数的地址就由此参数指定。这就要求在程序中定义一个函数作为新线程的入口函
数,该函数的名称任意,但函数类型必须遵照下述声明形式: 
DWORD WINAPI ThreadProc(LPVOID lpParameter); 
即新线程入口函数有一个 LPOVID类型的参数,并且返回值是 DWORD类型。许多初学者不知道这个函
数名称: ThreadProc能够改变。实际上,在调用 CreateThread创建新线程时,我们只需要传递线程
函数的入口地址,而线程函数的名称是无所谓的。 
. lpParameter 
对于 main函数来说,可以接受命令行参数。同样,我们可以通过这个参数给创建的新线程传递参数。
该参数提供了一种将初始化值传递给线程函数的手段。这个参数的值既可以是一个数值,也可以是
一个指向其他信息的指针。
. dwCreationFIags 
设置用于控制线程创建的附加标记。它可以是两个值中的一个: CREATE_SUSPENDED 或 0。如果该值
是 CREATE_SUSPENDED.那么线程创建后处于暂停状态,直到程序调用了 ResumeThread函数为止:如
果该值是 0.那么线程在创建之后就立即运行。 
. lp币rreadld
这个参数是→个返回值,它指向一个变量,用来接收线程 ID。当创建一个线程时,系统会为该线程
分配一个 ID。注意:在 Windows 2000和 WindowsNT4下,可以为此参数传递 NULL,表明对线程的 ID
不感兴趣,从而不会返回线程的标识符。但在 Windows 95或 98下,此参数值不能为 NULL,必须指
定一个变量来接收线程 ID。笔者使用的操作系统是 Windows 20∞,因此此参数值可以为 NULL。 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -