在Windows中,`WaitForSingleObject`是一個函數,用于等待一個或多個內核對象的狀態發生變化。該函數的原型如下:
DWORD WaitForSingleObject( HANDLE hObject, DWORD dwMilliseconds );
參數解釋如下:
`hObject`:要等待的內核對象的句柄。
`dwMilliseconds`:指定等待的時間,以毫秒為單位。可以使用特定值來控制等待的行為。
返回值表示函數執行結果,可能的取值如下:
`WAIT_OBJECT_0`:成功等待到了對象的信號。
`WAIT_TIMEOUT`:等待超時。
`WAIT_FAILED`:等待失敗,可能是由于傳入的參數無效或其他原因。
下面是一個示例,展示了如何使用`WaitForSingleObject`等待一個線程的結束:
#include#include DWORD WINAPI MyThreadProc(LPVOID lpParam) { // 在這里執行線程的任務 // ... return 0; } int main() { HANDLE hThread; DWORD dwThreadId; // 創建線程 hThread = CreateThread( NULL, // 默認安全屬性 0, // 默認線程棧大小 MyThreadProc, // 線程函數地址 NULL, // 傳遞給線程函數的參數 0, // 默認標志 &dwThreadId // 返回線程ID ); if (hThread == NULL) { printf("Failed to create thread\n"); return 1; } // 等待線程結束 DWORD dwResult = WaitForSingleObject(hThread, INFINITE); if (dwResult == WAIT_FAILED) { printf("WaitForSingleObject failed\n"); return 1; } printf("Thread finished\n"); // 關閉線程句柄 CloseHandle(hThread); return 0; }
在該示例中,`CreateThread`函數用于創建一個新的線程。然后,使用`WaitForSingleObject`函數等待線程的結束,直到`WaitForSingleObject`返回成功。最后,關閉線程句柄。
請注意,`WaitForSingleObject`函數有一個參數`dwMilliseconds`,該參數用于指定等待的時間。這里我們使用了`INFINITE`宏來表示無限等待,即一直等待到對象的信號。你也可以設置一個特定的等待時間,例如1000表示等待1秒鐘。