gpt4 book ai didi

c++ - PPL 任务 - 在桌面应用程序的 UI 线程中继续

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:23:01 25 4
gpt4 key购买 nike

我想使用 ppl 任务在后台做一些工作,并在完成后在窗口中显示结果。在我的例子中,UI 框架是 MFC。结构将是:

using namespace concurrency;

create_task([] {
// this can be run in any thread, shouldn't be the UI thread
// do real work here
return 42;
}).then([](int n)
{
// this should be run on the UI thread
// ... open a MFC window to display results
});

问题是,非 Windows 应用商店应用不允许指定 task_continuation_context。相反,运行时决定将使用哪个上下文(参见 task_continuation_context Class )。我能否依靠运行时来可靠地确定它需要在 UI 线程上运行延续?是否有合理的解决方法来实现我想要的 - 而不会阻塞 UI 线程?


更新: 试验表明运行时不会在 UI 线程上运行延续。那么,这是不可能的吗?

最佳答案

我为解决这个问题所做的是创建一个 Dispatcher 类和一个仅消息窗口,它是 Dispatcher 的一个成员。 Dispatcher 必须从主线程构建(我使用了单例),这样主线程就会处理发送到仅消息窗口的消息。我可以将 std::function 传递给我的 Dispatcher::ExecuteInMainThread 函数。然后 Dispatcher 将在仅消息窗口上调用 SendMessage,将指针(不幸的是只有一个指针是可能的)传递给 std::function。我在仅消息窗口中需要的唯一消息处理程序将在主线程中调用我传入的函数。

此 Dispatcher 可用于任务延续以在主线程中执行 std::function

关于c++ - PPL 任务 - 在桌面应用程序的 UI 线程中继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24199591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com