如何使 WaitForSingleObject 在从 main 调用的线程内接收信号作为类成员函数

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

本文关键字:信号 函数 成员 在从 WaitForSingleObject 何使 main 调用 线程      更新时间:2023-10-16

我在Windows中的main函数上有一段工作代码,C++如下:

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

信号来自 dll 函数。我尝试以以下方式将此原则移植到框架中:

  1. 我又有一个主,但这个主得到一个类 i1 的静态实例。此类有一个成员函数"event_checking"执行上述相同代码段。

  2. 我可以通过中间类的实例 i2 访问这个 event_checking 函数,所以我决定用 Wrap i1.event_checking

    void eventCheckingWrapper(){
        i1.event_checking();
    }
    
  3. 仍然在主要中,我在eventCheckingWrapper上生成了一个线程。所以我对只要信号到达就返回的线程不感兴趣。此原则的一个例子可以是:

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

线程运行良好,但没有信号到达,因此始终达到超时,线程在其 while 循环中重新开始。

我怎样才能正确地让它工作?

我解决了这个问题。所以雷米·勒博所说的一切都是真的。最后,dll 有一个功能,可以通过我之前必须调用的事件句柄激活信号接收。所以实际上没有信号来,但只是为了提供信息,在这次调试体验之后我可以确认的基本上是"父"线程需要在 Windows 中保持活动状态,winapi WaitForSingleObject(( 保持事件的状态信号,如果它没有被等待,新的重新设置事件不会改变其状态(保持信号(,只要没有线程等待它(之后它变为无信号模式(,因此不会出现时间问题。事实上,应该检查 3d party 软件提供的事件是否关心创建它的线程,因此检索句柄的位置是否没有问题。谢谢!