我想使用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线程上运行延续。那么,这不可能吗?
答案 0 :(得分:0)
我要解决的问题是创建一个Dispatcher类和一个仅消息窗口,它是Dispatcher的成员。必须从主线程构造Dispatcher(我使用单例),以便主线程处理发送到仅消息窗口的消息。我可以将std::function
传递给我的Dispatcher::ExecuteInMainThread
函数。然后,Dispatcher将在仅消息窗口上调用SendMessage
,将指针(不幸的是只有一个指针)传递给std::function
。我在仅消息窗口中需要的唯一消息处理程序将调用我传入的函数 - 在主线程内。
可以在任务继续中使用此Dispatcher在主线程中执行std::function
。