如何使 WaitForSingleObject 在从 main 调用的线程内接收信号作为类成员函数
How to make WaitForSingleObject receive a signal inside a thread called from main as a class member function?
我在Windows中的main函数上有一段工作代码,C++如下:
some_handle = dll_generate_handle;
while(true) {
if(WaitForSingleObject(some_handle,100)){
//CODE I AM INTERESTED ABOUT
}
}
信号来自 dll 函数。我尝试以以下方式将此原则移植到框架中:
我又有一个主,但这个主得到一个类 i1 的静态实例。此类有一个成员函数"event_checking"执行上述相同代码段。
我可以通过中间类的实例 i2 访问这个 event_checking 函数,所以我决定用 Wrap i1.event_checking
void eventCheckingWrapper(){ i1.event_checking(); }
仍然在主要中,我在eventCheckingWrapper上生成了一个线程。所以我对只要信号到达就返回的线程不感兴趣。此原则的一个例子可以是:
std::thread t(&ClassName::eventCheckingWrapper, &i2);
线程运行良好,但没有信号到达,因此始终达到超时,线程在其 while 循环中重新开始。
我怎样才能正确地让它工作?
我解决了这个问题。所以雷米·勒博所说的一切都是真的。最后,dll 有一个功能,可以通过我之前必须调用的事件句柄激活信号接收。所以实际上没有信号来,但只是为了提供信息,在这次调试体验之后我可以确认的基本上是"父"线程需要在 Windows 中保持活动状态,winapi WaitForSingleObject(( 保持事件的状态信号,如果它没有被等待,新的重新设置事件不会改变其状态(保持信号(,只要没有线程等待它(之后它变为无信号模式(,因此不会出现时间问题。事实上,应该检查 3d party 软件提供的事件是否关心创建它的线程,因此检索句柄的位置是否没有问题。谢谢!
相关文章:
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- C++函数包装器来捕获某些信号
- QObject::连接不起作用 - 使用函数语法找不到信号
- 如何在C++中使用 std::bind 函数作为信号处理程序?
- 如何使用 qt 中的信号槽控制函数的返回
- 从 Qt 中的信号调用成员函数的问题
- Qt的新信号/时隙语法问题 - 连接到一个简单的函数
- 窗口上信号处理程序的异步安全写入函数
- 程序在没有操作系统信号的情况下在函数中的特定行挂起
- 瓶颈 C++ 排序函数Wi-Fi 信号
- 在Qt中,如何延迟成员函数的返回,直到收到信号?
- C++ QT:获取指向信号的指针和插槽功能的函数
- 这是在Qt信号和插槽中使用参数调用函数的好方法吗?
- 在 for 循环中使用 lambda 函数连接信号插槽
- 如何使用拖放功能和点击信号函数QT创建标签
- Qt - 使用λ函数修改先前连接信号的插槽参数
- 如何使用unique_ptr声明调用构造函数并处理程序终止信号
- 如何使 WaitForSingleObject 在从 main 调用的线程内接收信号作为类成员函数
- IntelliSense函数定义未找到QT信号的警告
- 连接来自未知类的成员函数以增强信号