方案: - 我的主(UI)线程(线程“M”)运行,并旋转工作线程(“W”)以控制某些硬件。 - “W”希望每隔一段时间向“M”发送进度通知。 - 通知调用不能阻止“W”......“W”需要进行呼叫并立即返回; “M”将处理通知异步,不返回任何“W”。 - “M”必须通过在线程“M”上运行的回调通知。 - 必须能够传递数据(不要担心数据的线程安全性)。
.NET在它的System.ComponentModel.AsyncOperation类中有这样的功能,但我想创建跨平台代码,而不仅仅是.NET,甚至是严格的Win32(尽管我的第一个平台是Win32上的原生c ++)
使用Boost是一个优势。
我读过这个: Boost: Fire and forget asynchronous function call? 但我想知道是否有一个更简单的想要而不是启动额外的帮助线程。
任何想法和/或链接将不胜感激! -Dave
答案 0 :(得分:1)
如果您使用Boost.Thread,则可以使用condition variable。
答案 1 :(得分:0)
我将如何做到这一点:
编辑:请注意,使用互斥锁的要求是可选的。这将是最常见,最平台友好的解决方案,这就是为什么我把它放在我的例子中。如果永远阻止“W”线程的要求是最强的要求,那么你可以用无锁数据结构替换list + mutex,假设你的平台有一个。