异步代理和窗口消息

Asynchronous Agents and window messages

本文关键字:消息 窗口 代理 异步      更新时间:2023-10-16

我目前正在微软的并发运行时中使用异步代理库。我还没有找到一种明显的方法来表明任务已经完成,通过使用窗口消息,或其他方式通知UI线程,工作已经完成。

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

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

这不是内置在库中有点奇怪,因为它不是一个跨平台库。据我所知,它是为Windows系统设计的,而且只能在Windows系统上运行。

功能是否在库中可用,还是我必须手工滚动这个?

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