Win32线程简介
Win32线程是Windows API的一部分,上下文包括:寄存器、核心栈、线程环境块和用户栈。
Win32线程的有关API
Win32线程的头文件是<Windows.h>,仅适用于Windows操作系统。
创建用户级线程
HANDLEWINAPICreateThread(LPSECURITY_ATTRIBUTESlpThreadAttributes,SIZE_TdwStackSize,LPTHREAD_START_ROUTINElpStartAddress,LPVOIDlpParameter,DWORDdwCreationFlags,LPDWORDlpThreadId);
结束本线程
VOIDWINAPIExitThread(DWORDdwExitCode);
挂起指定的线程
DWORDWINAPISuspendThread(HANDLEhThread);
恢复指定线程运行
DWORDWINAPIResumeThread(HANDLEhThread);
等待线程运行完毕
DWORDWINAPIWaitForSingleObject(HANDLEhHandle,DWORDdwMilliseconds);
返回当前线程的线程标识符
DWORDWINAPIGetCurrentThreadId(void);
返回当前线程的线程句柄
HANDLEWINAPIGetCurrentThread(void);
在C程序中要创建线程,推荐使用库函数
uintptr_t _beginthreadex(
void *security, //安全属性,NULL为默认安全属性
unsigned stack_size, //指定线程堆栈的大小。如果为0,则线程堆栈大小和创建它的线程的相同。一般用0
unsigned ( *start_address )( void * ), //指定线程函数的地址,也就是线程调用执行的函数地址(用函数名称即可,函数名称就表示地址)
void *arglist, //传给线程的参数指针;传多个参数时请用结构体 //可以通过传入对象的指针,在线程函数中再转化为对应类的指针
unsigned initflag, //线程初始状态,0:立即运行;CREATE_SUSPEND:suspended(悬挂)
unsigned *thrdaddr //用于记录线程ID的地址
);
创建线程的语句结构
#include<windows.h> //创建线程函数需要操作系统函数
#include<process.h> //创建线程函数头文件
int main(){
HANDLE hThread1; //线程的访问句柄
unsigned ThreadID=1;
//线程标识号,不用变量赋值,则只能为NULL
hThread1=_beginThreadex(NULL,0,getInput,NULL,0, &ThreadID);
/*创建一个对应于getInput函数的线程 */
printf("main thread is running\n");//自定义的主函数体
WaitForSingleObject(hThread1,INFINITE);//等待线程结束
CloseHandle(hThread1);//无须控制线程时删除此句柄,可防止内核对象泄露。
}
变为线程的函数结构
unsigned __stdcall getInput(void* pArguments)
//线程函数的返回值是指定类型,形参也只能有一个
{
printf("hThreadlis running\n");//自定义的函数体
_endthreadex(0);//线程完成时要调用_endthread
return0;
}
�