2011-04-18 110 views
2

我有一個應用程序,其中我跨線程共享事件句柄。這些事件句柄用於嚮應用程序發送完整的和接收到的串行I/O數據通知。這些句柄作爲類構造函數的傳遞參數或者對CreatThread的調用被複制到新線程中。我認爲這是有效的,但我遇到了一個奇怪的錯誤,似乎這些事件可能沒有得到正確的信號。我應該使用DuplicateHandle函數嗎?如果是這樣,下列用法是否正確?跨線程使用事件句柄 - C++

::DuplicateHandle(
    ::GetCurrentProcessId(), 
    hMyHandle, 
    ::GetProcessIdOfThread(hReceivingThreadHandle), 
    &hMyDupHandle, 
    0, 
    TRUE, 
    DUPLICATE_SAME_ACCESS 
    ); 

不幸的是,我不能100%確定這個bug,因爲多線程調試很棘手。謝謝。

回答

2

如果使用現有句柄的所有線程都在相同的進程中,則不需要使用該API(DuplicateHandle)。同一進程中的線程可以爲事件,信號量等使用相同的句柄值。

1

您可以共享進程中不同線程之間的事件句柄。你的錯誤在別處。