线程中常用函数及参数

1._beginthread()

假如成功,函数将会返回一个新线程的句柄(HANDLE是void *类型)

HANDLE hd =_beginthread(CheckKey, 0, NULL)

  • 新线程的起始地址 ,指向新线程调用的函数的起始地址
  • 新线程的栈大小,可以为0
  • 传递给线程的参数列表,无参数时为NULL

2.CreateThread()

函数返回值:

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

HANDLE thread = CreateThread(NULL, 0, Fun, NULL, 0, NULL);

CloseHandle(thread);  //关闭线程

  • 第一个参数表示线程内核对象的安全属性,一般传入NULL表示使用默认设置
  • 第二个参数表示线程栈空间大小。传入0表示使用默认大小(1MB)
  • 第三个参数传递了一个函数的地址,也是我们要制定的新线程。
  • 第四个参数是传给新线程的参数指针。
  • 第五个参数指定额外的标志来控制线程的创建,为0表示线程创建之后立即就可以进行调度,如果为CREATE_SUSPENDED则表示线程创建后暂停运行,这样它就无法调度,直到调用ResumeThread()。
  • 第六个参数将返回线程的ID号,传入NULL表示不需要返回该线程ID号。

3.WaitForSingleObject()

函数功能:WaitForSingleObject函数用来检测hHandle事件的信号状态,当函数的执行时间超过dwMilliseconds就返回,但如果参数dwMilliseconds为INFINITE时函数将直到相应时间事件变成有信号状态才返回,否则就一直等待下去,直到 WaitForSingleObject有返回值才执行后面的代码。此外,当dwMilliseconds设置为特殊值0时,测试hHandle核心对象是否被激发,函数立即返回。

函数原形:

DWORD WINAPI WaitForSingleObject(

  HANDLE hHandle,

  DWORD dwMilliseconds

);

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

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

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

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

 4.WaitForMultipleObjects()

函数原形:

DWORD WaitForMultipleObjects(  

  DWORD nCount,             

  CONST HANDLE *lpHandles,  

  BOOL fWaitAll,         

  DWORD dwMilliseconds    

);   

  • nCount 句柄的数量 最大值为MAXIMUM_WAIT_OBJECTS(64)  
  • HANDLE 句柄数组的指针。  
  • HANDLE 类型可以为(Event,Mutex,Process,Thread,Semaphore )数组  
  • BOOL fWaitAll 等待的类型,如果为TRUE 则等待所有信号量有效在往下执行,FALSE 当有其中一个信号量有效时就向下执行  (表示如果为true,则表示所有的IpHandles都必须激发,此函数才得以返回,否则,此函数将在任何一个IpHandle激发时就返回。)
  • DWORD dwMilliseconds 第四个参数表示超时也返回,可为0,立即返回,INFINITE表示无穷等待,如果没有信号量就会在这死等。 

 5.CreateEvent()

HANDLE CreateEvent(
LPSECURITY_ATTRIBUTESlpEventAttributes,// 安全属性,一般为NULL
BOOLbManualReset,// 复位方式,创建的Event是自动复位还是人工复位.如果true,人工复位
BOOLbInitialState,// 初始状态,指定事件对象的初始状态。如果为TRUE,初始状态为有信号状态;否则为无信号状态。
LPCTSTRlpName // 事件对象的名称。在OpenEvent函数中可能使用。
);
 
6.SetEvent/ResetEvent
函数原型:
BOOL SetEvent(HANDLE hEvent);
BOOL ResetEvent(HANDLE hEvent);
 
SetEvent,ResetEvent,CreatEvent三者之间的关系:

CreatEvent():创建一个事件对象

SetEvent():把指定事件对象的状态设置为发信号状态(激发事件)

ResetEvent():把指定事件对象的状态设置为不发信号状态

原文地址:https://www.cnblogs.com/sjxbg/p/5786731.html