HANDLE CreateEvent(
LPSECURITY_ATTRIBUTES lpEventAttributes, // 安全属性
BOOL bManualReset, // 复位方式,如果是TRUE,那么必须用ResetEvent函数来手工将事件的状态复原到无信号状态。如果设置为FALSE,当事件被一个等待线程释放以后,系统将会自动将事件状态复原为无信号状态。
BOOL bInitialState, // 初始状态,如果为TRUE,初始状态为有信号状态;否则为无信号状态。
LPCTSTR lpName // 对象名称
);
DWORD WaitForSingleObject(
HANDLE hHandle,
DWORD dwMilliseconds
);
参数hHandle是一个事件的句柄,第二个参数dwMilliseconds是时间间隔。如果时间是有信号状态返回WAIT_OBJECT_0,如果时间超过dwMilliseconds值但时间事件还是无信号状态则返回WAIT_TIMEOUT。
但如果参数dwMilliseconds为INFINITE时 函数将直到相应时间事件变成有信号状态才返回,否则就一直等待下去;为0则立马返回。
一、一个线程等另一个线程执行完再执行
CreateEvent(NULL, TRUE, TRUE, NULL);//创建一个事件,必须用resetevent来复原;初时有信号。
if(WaitForSingleObject(m_pLaserThread->m_pEventMarkOver, INFINITE) == WAIT_OBJECT_0)//会一直等待知道resetevent
{
}
二、一个线程循环执行某一段程序直到另一个线程结束。
m_pEventMarkCurveOver = CreateEvent(NULL, true, false, NULL);//创建一个事件,必须用resetevent还原,初时没信号。
while( WaitForSingleObject(m_pCurveThread->m_pEventMarkCurveOver, 0) != WAIT_OBJECT_0)//立马返回,一直循环,知道setevent有信号。
{}