1:线程基础
进程有进程内核对象和地址空间,而线程则是线程内核对象和线程栈
之所以线程比进程高效,是因为进程地址空间要占用很多资源用于记录,并且.exe和.dll文件要加载到地址空间,还要用到文件资源
2:CreateThread
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
SIZE_T dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId
);
2.1:LPSECURITY_ATTRIBUTES lpThreadAttributes参数一般为NULL,如果要让此线程内核对象句柄可以被继承,则应创建一个安全描述符并将其bInheritHandle设为true
2.2:dwStackSize为堆栈大小,默认是预留1M,调拨一个页面存储空间,如果调拨的用完,则会产生一个异常,这样会继续调拨一个页面,最多达到1M,这是为了检测死循环BUG
2.3:lpStartAddress是线程函数,LPVOID lpParameter是传入参数,线程函数一般如下
DWORD WINAPI MyThread(PVOID pLparam)
{
return dwResult;//返回线程退出代码,这个代码会被设置到线程内核对象中
}
2.4:DWORD dwCreationFlags如果为0,则线程创建好后可以立即被调度,以可以设置为CREATE_SUSPENDED
2.5:LPDWORD lpThreadId可以设置为NULL,表示我们不需要线程ID
3:线程退出