在线程中使用基于事件的API(阻塞模式)
Using event based API in a thread (blocking mode)
在我的C++应用程序中,我使用第三方库进行蓝牙发现过程。我正在看提供的例子来学习如何使用它
最符合我需求的例子是一个简单的GUI应用程序,它从库中调用Discovery(long timeout)
函数来启动蓝牙发现。该函数立即返回(以便GUI不被冻结(,并在发现新的BT设备后激发称为OnDeviceFound
的__event
,在经过timeout
后激发OnDiscoveryComplete
。
因此,在GUI构造函数(示例(中,__hook
定义如下:
__hook(&BluetoothDiscovery::OnDiscoveryComplete, &m_Discovery, &BluetoothClientDlg::OnDiscoveryComplete);
现在,我需要在我的应用程序中实现同样的功能,这不是一个窗口应用程序,而是一个作为Windows服务运行的控制台应用程序,在一个单独的线程上进行连续的发现,以寻找新设备。
所以,实际上,由于我的实现使用线程进行发现,所以我不需要基于事件的发现过程,但我需要一个阻塞发现。库不提供用于发现的阻止API。
所以问题来了:在阻塞函数中使用基于事件的函数可能吗?换句话说,是否可以编写一个函数,该函数可以在线程主循环中每隔n秒调用一次,以执行发现过程并返回已建立的蓝牙设备(使用基于事件的库API(?
您想要的是一个Semaphore,您的主线程一直坐在它上,直到发现线程完成,然后通知主线程唤醒。
像你建议的积极等待是令人讨厌的,应该尽可能避免。
相关文章:
- 两个线程一个使用流 Api,另一个线程创建文件失败并出现错误ERROR_SHARING_VIOLATION
- 在 Win32 API 中使用多线程
- 如何使用 Win32 API 从 Excel VBA 中的非"Single-Threaded Apartment"线程调用 InternetGetProxyInfo
- 使用 C API 更改张量流推理的线程数
- 如何与LIBPQXX API同时插入数据?(PostgreSQL,线程)
- E/libEGL:调用没有当前上下文的 OpenGL ES API (每个线程记录一次) - Android/SDL
- 按顺序保留多线程API的传入请求订单
- 同步线程安全的API,用于暴露缓存数据
- 在 API 和应用程序线程之间共享数据
- 为什么Win API线程执行函数,而标准线程则没有
- 从C API对python的多线程调用
- 在多个线程中使用提升异步 API
- 如何使用 Win32 API 获取任何线程的堆栈大小和堆栈限制
- 如何使用QT/C 中的多线程用API访问我的数据库
- 使用C 中的Windows API使用多线程列出文件
- 从 C++ => C 包装的 API(多线程)传输错误字符串
- 使用Python和C api的多线程
- 使用本机windows API实现win32线程安全队列
- 编写C API的线程安全C++包装器的努力
- c++ 11线程API: MSVC 2010有免费的实现吗?