example code , from norains 的 '事件和进程间的数据交换 ' :
# 进程A:
# DWORD NotifyProc(LPVOID pParam)
# {
# while(TRUE)
# {
# if(IsDataChange() != FALSE)
# {
# //设置关联数据
# SetEventData(hEventNotify,dwData);
#
# PulseEvent(hEventNotify);
# }
# }
# }
#
# 进程B:
# DWORD WaitNotifyProc(LPVOID pParam)
# {
# while(TRUE)
# {
# DWORD dwReturn = WaitForSingleObject(hEventNotify);
# if(dwReturn != WAIT_TIMEOUT)
# {
# //获取关联数据
# dwData = GetEventData(hEventNotify);
# }
# }
# }
從這裡來看, SetEventData/GetEventData的用法有點問題。
因為Set 和 Get 都要分成兩個動作:
- SetEventData
- PluseEvent
- WaitForSingleObject
- GetEventData
而且接下來 又會有一次 PluseEvent。
所以又會再收一次 -- 這樣的結果就是 Get 的 Thread 會收到兩次相同的 EventData 而漏掉 一個 Data。
沒有留言:
張貼留言