【发布时间】:2014-03-19 02:00:00
【问题描述】:
注意:我使用的是 C++,而不是 C#。
我有一些代码可以进行一些计算,还有一些代码使用结果。使用结果的位已经在任务中,但原始计算不是——它实际上在主线程的 App::App() 初始化的调用堆栈中。
在过去,我会使用:
while (!computationIsFinished())
std::this_thread::yield(); // or the like, depending on API
然而,对于 Windows 应用商店应用程序(又名 WinRT,pka Metro 风格),这似乎不存在。我不能使用延续,因为使用结果的位与原始计算发生的位置无关——而且该计算无论如何都不是任务。
搜索找到 Concurrency::Context::Yield(),但 Windows 应用商店应用似乎不存在上下文。
所以...假设我在后台线程上执行任务。我如何yield?特别是,我如何在 while 循环中产生?
【问题讨论】:
-
你能把计算封装在一个任务中吗?
-
不,在初始化时需要,在主线程上,我不想阻塞主线程。我知道还有其他异步编程方式,我主要想知道 yield 是否仍然有效。
标签: multithreading windows-runtime c++-cx