异步代理和窗口消息

时间:2011-09-12 21:34:53

标签: c++ visual-studio-2010 concurrency-runtime

我目前正在使用Microsoft Concurrency Runtime中的异步代理库。我还没有找到一种明显的方法来通过使用窗口消息来表示任务已完成,或者通过其他方式通知UI线程已完成工作。

我知道我可以将窗口句柄和消息值(WM_xxx)传递给任务,并让任务使用PostMessage()来表示UI线程。在我看来,这有点难看,也是错误的根源。如果发生异常,我必须有一个catch处理程序来指示我的UI线程。这很容易被遗忘,并且异常情况可能不会经常运行,因此很难发现它。

该文档讨论了如何将数据移回UI线程。它不使用窗口消息,而是使用轮询技术。当有“中断”方法可用时,我觉得设置定时器来轮询任务是否完成是愚蠢的!

这有点奇怪,它没有内置到库中,因为它不是跨平台库。根据我的理解,它被设计为仅在Windows和Windows上运行。

库中是否有可用的功能,还是我必须手动滚动它?

1 个答案:

答案 0 :(得分:1)

您可以创建一个监视器线程,其唯一功能是监视Windows消息的unbounded_buffer并适当地分派该消息。请让您的代理人了解此缓冲区。