Win32 线程 不完全记录

Win32线程简介

Win32线程是Windows API的一部分,上下文包括:寄存器、核心栈、线程环境块和用户栈。


Win32线程的有关API

Win32线程的头文件是,仅适用于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  //创建线程函数需要操作系统函数

#include  //创建线程函数头文件

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;

}

你可能感兴趣的:(Win32 线程 不完全记录)