2011-09-12 51 views
5

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

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

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

有点奇怪,这不是内置于库中,因为它不是跨平台库。据我所知,它只能在Windows和Windows上运行。

库中是否提供了该功能,或者是否必须手动执行此操作?

回答

1

您可以创建一个监视线程,其唯一功能是监视windows消息的unbounded_buffer并适当地调度该消息。让你的代理知道这个缓冲区。