线程同步解决
不同线程函数的执行顺序,进行线程协调。
API
DWORD WINAPI WaitForSingleObject(
HANDLE hHandle, // 对象句柄 Thread/Event/Job/Mutex/Process/Semaphore/Waitable timer/Memory resource notification
DWORD dwMilliseconds // 等待时间,INFINITE一直等待
);
返回值
WAIT_TIMEOUT 0x00000102L // 等待超时
WAIT_OBJECT_0 0x00000000L // 等待到了指定对象发出信号状态
WAIT_ABANDONED 0x00000080L // 当 hHandle 为 mutex 时,拥有mutex的线程在结束时没有释放内核对象会返回该值。
WAIT_FAILED ((DWORD)0xFFFFFFFF). // 调用GetLastError获得错误信息
DWORD WINAPI WaitForMultipleObjects(
DWORD nCount, // 等待线程数量(最多MAXIMUM_WAIT_OBJECTS个)
const HANDLE* lpHandles, // 线程句柄指针数组(包含多个线程句柄)
BOOL bWaitAll, // 是否全部等待,TRUE,若所有线程都为已通知状态则函数返回 WAIT_OBJECT_0
// FALSE 返回值为线程内核对象数组的索引值
DWORD dwMilliseconds // 等待时间
);
返回值
WAIT_OBJECT_0 to (WAIT_OBJECT_0 + nCount– 1)
WAIT_ABANDONED_0 to (WAIT_ABANDONED_0 + nCo