BOOL ResetEvent(HANDLE hEvent);
引数の意味は以下の通り。
hEvent | 待機スレッド解放を実行するイベントオブジェクトのハンドル。 |
PulseEventの実行に成功した場合、TRUEが返される。実行に失敗した場合、FALSEが返される。
#define EVENT_NAME "Event Object Test" /* スレッド用関数 */ DWORD WINAPI DoThread(DWORD ThreadCount) { HANDLE hEvent; int i; hEvent = OpenEvent(EVENT_ALL_ACCESS, FALSE, EVENT_NAME); for(i=0; i<3; i++) { /* 所有権獲得まで待機 */ WaitForSingleObject(hEvent, INFINITE); /* 処理 */ printf("スレッド%d: 処理開始\n", ThreadCount); Sleep(1000); printf("スレッド%d: 処理終了\n", ThreadCount); } CloseHandle(hEvent); return(0); } /* メイン関数 * 排他処理に用いるミューテックスを作成 * スレッドを作成 * スレッドの終了を待機 */ int main(int argc, char **argv) { HANDLE hThread[2]; HANDLE hEvent; int i; /* イベントオブジェクトの作成 */ hEvent = CreateEvent(NULL, TRUE, FALSE, EVENT_NAME); /* スレッドを2つ作成 */ for(i=0; i<2; i++) { hThread[i] = CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE)DoThread, (LPVOID)i, 0, NULL); Sleep(500); } for(i=0; i<3; i++) { /* 処理 */ Sleep(5000); /* スレッドの処理を実行 */ PulseEvent(hEvent); } /* スレッドの終了まで待機 */ WaitForMultipleObjects(2, hThread, TRUE, INFINITE); /* 後処理 */ CloseHandle(hEvent); CloseHandle(hThread[0]); CloseHandle(hThread[1]); return(0); }