第二章线程的第一次接触,主要讲了如何创建线程以及需要注意的几点。
一、创建线程
与调用函数的过程类似;线程只不过用CreateThread的API将函数封装起来,并产生一个与主程序同时执行的程序来调用被封装的函数。
HANDLE hThread = CreateThread (
LPSECURITY_ATTRIBUTES lpThreadAtt,
DWORD dwStackSize
LPTHREAD_START_ROUTINE lpFun,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadID)
LpFun:就是指向被封装的函数的地址。
LpParameter: 就是指向被封装的函数的参数(没有参数填入null)
下图为简单的函数调用和调用线程的过程:
注意:当用CreateThread之后,产生的新的线程不会立即启动,执行的时间也是无法预期的。
二、核心对象
DWORD WINAPI ThreadFun(LPVOID n) //线程函数: { return 10; } int main() { hThrd = CreateThread(null,0,ThreadFun, …); DWORD exitCode=0; for( ; ; ) { GetExitCodeThread(hThrd,&exitCode); if ( exitCode == STILL_ACTIVE){ //线程仍然在运行 } else{ break; } } //exitCode保存了函数的返回值 printf( “线程函数的返回值 : %d /n”, exitCode); CloseHandle(hThrd); return 0; }