您的位置:首页 > 编程语言

Windows核心编程-线程基础

2018-01-28 15:41 197 查看
Windows创建的线程的函数是:

HANDLE CreateThread(

PSECURITY_ATTRIBUTES  psa,

DOWRD  cbStackSize,

PTHREAD_START_ROUTINE pfnStartAddr,

PVOID  pvParam,

DWORD  dwCreateFlag,

PDWORD  pdwThreadID);

psa是指向结构体SECURITY_ATTRIBUTES结构体的指针,使用默认安全属性的话,使用NULL即可。

cbStackSize是指定线程栈使用多少地址空间。

pfnStartAddr 和 pvParam分别是函数的地址和对应的参数。

dwCreateFlag指定额外的标志来控制线程的创建。

pdwTheadID代表系统分配给新线程的ID。

下面是退出线程的函数。

VOID ExitThread( DWORD dwExitCode )

BOOL TerminateThread( HANDLE hThread, DWORD dwExitCode);//需要知道线程的句柄

线程终止时,会发生以下这些事情:

1、线程拥有的所有用户对象句柄会被释放;

2、线程的退出代码由STILL_ACTIVE变为传给ExitThread和TerminateThead的代码;

3、线程的内核对象状态变为触发;

4、如果线程是进程中最后一个活动线程,系统认为进程也终止了;

5、线程内核对象使用计数递减1。

创建线程时,一定不要调用系统提供的CreateThread函数,要调用运行库函数_beginthreadex,该函数原型如下:

unsigned long _beginthreadex(

void  *security,

unsigned stacksize,

unsigned (*stack_address)(void*),

void *arglist,

unsigned  initflag,

unsigned *thrdaddr

);

该函数用_tiddata结构体保存线程执行需要的信息包括函数和参数等,内部调用CreateThead函数,传入的函数是_threadstartex函数,该函数内部调用了_callthreadstartex函数,并提供结构和异常处理,在_callthreadstartex函数中,调用了_endthreadex函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息