1
我想寫一個線程正文(說,myThread
),它是與父線程同步使用手動重置事件,說g_myThreadEvent
。WaitForSingleEvent是否可以等待事件重置?
myThread
使用此事件通知父母它已成功檢索輸入參數。
我想知道父母是否可以重複使用相同的事件來指示myThread
退出。
有些東西在下面的幾行:
子:
g_myThreadEvent = UNSIGNALLED.
myThread() {
read_inparam()
set(g_myThreadEvent);
for(;;) {
// do something important
if(is_reset(g_myThreadEvent)) break;
}
}
家長:
start_thread(){
CreateThread(myThread, some_arguments);
WaitForSingleobject(g_myThreadEvent, INFINITE);
}
stop_thread() {
reset(g_myThreadEvent);
}
這將使我使用同步線程單一事件,而不是使用單獨的事件來停止線程更簡單的解決方案。
如果我從子線程設置g_myThreadEvent並在進入處理循環之前立即重置它,會發生什麼?我假設父母應該在設置g_myThreadEvent時收到通知。 (然後我應該能夠等待從我的子線程設置g_myThreadEvent) –
@s_b您描述的活動是什麼['PulseEvent'](http://msdn.microsoft.com/zh-cn/library/windows /desktop/ms684914(v=vs.85).aspx)是專門設計的。它釋放*活躍*服務員。但是,在孩子開始脈搏時,父母並沒有積極地等待這樣的保證。它有一個自然的競賽條件。父母可以啓動子線程,該子線程通過脈衝運行(沒有父母等待),然後孩子進入循環檢查事件信號,然後父母終於運行,等待相同的事件信號,但現在在那裏沒有人可以發出信號。 – WhozCraig