第6章 线程的基础知识
线程也是由两个部分组成:
- 线程的内核对象,系统用它来管理现场。也是系统用来存放线程统计信息的地方。
- 线程堆栈,用于维护线程在执行代码时需要的所有函数参数和局部变量。
6.3 线程函数
DWORD WINAPI ThreadFunc(PVOID pvParam)
{
DWORD dwResult = 0;
...
return(dwResult);
}
- 多个线程函数必须赋予不同的名字。
- 参数定义由程序员决定,没有ANSI/Unicode问题。
- 线程必须返回一个值,将成为推出代码。
- 线程函数应尽可能使用函数参数和局部变量。使用静态变量和全局变量时,多个线程可以同时访问这些变量,可能破坏变量的内容。
6.4 CreateThread函数
HANDLE CreateThread(
PSECURITY_ATTRIBUTES psa,
DWORD cbStack,
PTHREAD_START_ROUTINE pfnStartAddr,
PVOID pvParam,
DWORD fdwCreate,
PDWORD pdwThreadID);
新线程可以访问进程的内核对象的所有句柄、进程中的所有内存和在这个相关进程中的所有其他线程的堆栈。
CreateThread是用来创建线程的Windows函数,如果正在编写C/C++代码,决不应该调用CreateThread。相仿应该调用Visual C++运行期库函数_beginthreadex。
6.4.1 psa
同进程,一般传入NULL,如果希望子进程能继承该线程对象的句柄,则必须设定该结构的bInheritHandle成员为TRUE。
6.4.2 cbStack
这段没看懂