如何让WaitForSingleObject在一个从main调用的线程中接收一个信号作为类成员函数?

问题描述 投票:-1回答:1

我在Windows中使用C ++的主要功能上有一段代码,如:

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循环中重新开始。

我怎样才能正常运行?

c++ winapi stdthread
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.