簡體   English   中英

如何使 WaitForSingleObject 在從 main 作為類成員函數調用的線程內接收信號?

[英]How to make WaitForSingleObject receive a signal inside a thread called from main as a class member function?

我在 Windows 中使用 C++ 編寫了一段關於 main 函數的工作代碼,例如:

some_handle = dll_generate_handle;
while(true) {
    if(WaitForSingleObject(some_handle,100)){
          //CODE I AM INTERESTED ABOUT
    }
}

該信號來自一個 dll 函數。 我嘗試以下一種方式將此原則移植到框架中:

  1. 我又有一個 main ,但是這個 main 獲取了類 i1 的靜態實例。 這個類有一個成員函數“event_checking”,執行上面相同的代碼。

  2. 我可以通過中間類的實例 i2 訪問此 event_checking 函數,因此我決定將 i1.event_checking 與

    void eventCheckingWrapper(){ i1.event_checking(); }
  3. 仍然在主要我在 eventCheckingWrapper 上生成一個線程。 所以我對只要信號到達就返回的線程不感興趣。 這個原則的一個例子可能是:

     std::thread t(&ClassName::eventCheckingWrapper, &i2);

線程運行良好,但沒有信號到達,因此總是達到超時並且線程在其 while 循環中重新開始。

我怎樣才能正確地讓它工作?

我解決了這個問題。 所以雷米勒博說的都是真的。 最后,dll 有一個函數可以通過我之前必須調用的事件句柄來激活信號的接收。 所以實際上沒有信號到來,但只是為了提供信息,我可以在這次調試體驗之后確認基本上是“父”線程需要在 Windows 中保持活動狀態,winapi WaitForSingleObject() 保持事件的狀態,如果它沒有一直等待並且重新設置事件不會改變其狀態(保持有信號),只要沒有線程等待它(之后它更改為無信號模式),因此不會出現時間問題。 事實上,應該檢查 3d 方軟件提供的事件是否關心創建它的線程,因此在檢索句柄時是否沒有問題。 謝謝!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM