1. windows API相关常用的线程函数
更多详见MSDN--Process and Thread Functions
1.1. CreateThread
CreateThread将在主线程的基础上创建一个新线程,大致做如下步骤:
1)在内核对象中分配一个线程标识/句柄,可供管理,由CreateThread返回
2)把线程退出码置为STILL_ACTIVE,把线程挂起计数置1
3)分配context结构
4)分配两页的物理存储以准备栈,保护页设置为PAGE_READWRITE,第2页设为PAGE_GUARD
5)lpStartAddr和lpvThread值被放在栈顶,使它们成为传送给StartOfThread的参数
6)把context结构的栈指针指向栈顶(第5步)指令指针指向startOfThread函数
HANDLE WINAPI CreateThread(
__in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes,
__in SIZE_T dwStackSize,
__in LPTHREAD_START_ROUTINE lpStartAddress,
__in_opt LPVOID lpParameter,
__in DWORD dwCreationFlags,
__out_opt LPDWORD lpThreadId
);
1)lpThreadAttributes:指向SECURITY_ATTRIBUTES型态的结构的指针。在Windows 98中忽略该参数。在Windows NT中,它被设为NULL,表示使用缺省值。
2)dwStackSize,线程堆栈大小,一般=0,在任何情况下,Windows根据需要动态延长堆栈的大小。
3)lpStartAddress,指向线程函数的指针,形式:@函数名,函数名称没有限制,但是必须以下列形式声明: DWORD WINAPI ThreadProc (LPVOID lpParam) ,格式不正确将无法调用成功。
4)lpParameter:向线程函数传递的参数,是一个指向结构的指针,不需传递参数时,为NULL。
5)dwCreationFlags :线程标志,可取值如下 :
(a)CREATE_SUSPENDED-----创建一个挂起的线程,
(b)0---------------------------------表示创建后立即激活。
6)lpThreadId:保存新线程的id。
7)返回值&#