MFC笔记(四)——多线程程序设计2:创建线程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37764129/article/details/83380484

2.1 CreateThread()

(1)函数原型:创建线程

HANDLE WINAPI CreateThread(

  LPSECURITY_ATTRIBUTES lpThreadAttributes,

  SIZE_T dwStackSize,

  LPTHREAD_START_ROUTINE lpStartAddress,

  LPVOID lpParameter,

  DWORD dwCreationFlags,

  LPDWORD lpThreadId

);

(2)函数说明:

        第一个参数表示线程内核对象的安全属性,一般传入NULL表示使用默认设置。

        第二个参数表示线程栈空间大小。传入0表示使用默认大小(1MB)。

        第三个参数表示新线程所执行的线程函数地址,多个线程可以使用同一个函数地址。

        第四个参数是传给线程函数的参数

        第五个参数指定额外的标志来控制线程的创建,为0表示线程创建之后立即就可以进行调度,如果为CREATE_SUSPENDED则表示线程创建后暂停运行,这样它就无法调度,直到调用ResumeThread()。

        第六个参数将返回线程的ID号,传入NULL表示不需要返回该线程ID号。

(3)函数返回值:

        成功返回新线程的句柄,失败返回NULL。

2.2 _beginthreadex()

(1)函数的定义:

uintptr_t _beginthreadex( // NATIVE CODE
   void *security,
   unsigned stack_size,
   unsigned ( __stdcall *start_address )( void * ),
   void *arglist,
   unsigned initflag,
   unsigned *thrdaddr 
);

(2)参数说明

        第1个参数:安全属性,NULL为默认安全属性
        第2个参数:指定线程堆栈的大小。如果为0,则线程堆栈大小和创建它的线程的相同。一般用0
        第3个参数:指定线程函数的地址,也就是线程调用执行的函数地址(用函数名称即可,函数名称就表示地址)
        第4个参数:传递给线程的参数的指针,可以通过传入对象的指针,在线程函数中再转化为对应类的指针
        第5个参数:线程初始状态,0:立即运行;CREATE_SUSPEND:suspended(悬挂)
        第6个参数:用于记录线程ID的地址

转自:https://blog.csdn.net/zylc369/article/details/7024583

2.3 WaitForSingleObject

(1)函数功能:等待函数 – 使线程进入等待状态,直到指定的内核对象被触发。

(2)函数原形:

DWORD WINAPI WaitForSingleObject(

  HANDLE hHandle,

  DWORD dwMilliseconds

);

(3)函数说明:

        第一个参数为要等待的内核对象。

        第二个参数为最长等待的时间,以毫秒为单位,如传入5000就表示5秒,传入0就立即返回,传入INFINITE表示无限等待

        因为线程的句柄在线程运行时是未触发的,线程结束运行,句柄处于触发状态。所以可以用WaitForSingleObject()来等待一个线程结束运行。

(4)函数返回值:

        在指定的时间内对象被触发,函数返回WAIT_OBJECT_0。超过最长等待时间对象仍未被触发返回WAIT_TIMEOUT传入参数有错误将返回WAIT_FAILED。

 
 

猜你喜欢

转载自blog.csdn.net/qq_37764129/article/details/83380484
今日推荐