Win32 线程 不完全记录

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;

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ## 可重入函数 ### 可重入性的理解 若一个程序或子程序可以安全的被并行执行,则称其为可重入的;即当该子程序正...
    夏至亦韵阅读 4,026评论 0 0
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,796评论 1 32
  • LINUX 基础知识 1、线程的概念 上下文切换 : 运行程序前需要将相应进程信息读入内存,如果运行进程A后需要紧...
    Ycres阅读 4,101评论 0 2
  • 我特别深刻的记得上大学的时候和朋友逛超市,当时我的愿望就是以后要是可以逛超市完全不看价格,然后有一辆Polo,有一...
    找自己forever阅读 1,059评论 0 0
  • 时间管理课程: 1,运动的重要性 2.早起的程序,早起运动的重要性,注重循序渐进。 3,要事第一,懂得吃青蛙,这样...
    曦哈小子阅读 583评论 0 2