我有一个在运行时运行的工作线程,它生成事件。
我可以使用disp = Windows::UI::Core::CoreWindow::GetForCurrentThread()->Dispatcher
来处理UI线程中的这些事件。
更确切地说,我在工作线程内的任何地方使用disp->RunAsync(...)
对UI进行了修改。
但我不知道如何进行倒置操作。我想在UI线程中有一些Async函数,当我点击某个按钮时,在工作线程中执行操作(在某些std::unique_ptr
上)。
答案 0 :(得分:0)
如果我理解正确,您希望能够在单击按钮时运行异步操作,但是在您引用为工作线程的特定线程上运行。
首先 - 由于您希望在2个线程中使用资源,因此您不应使用ln(0)
并使用unique_ptr
,因为您在两个线程之间共享此资源。
第二 - 如果您不一定要在特定主题上运行该操作,那么您只需使用Windows::System::Threading::ThreadPool::RunAsync并按值捕获shared_ptr
。
例如:
shared_ptr
如果您必须在特定线程上运行该操作,那么我假设您希望能够将操作附加到已经运行的线程,否则您正在创建一个线程,您可以使用上面的示例。 因此,为了将操作附加到已经运行的线程,该线程必须具有获取新操作然后以同步顺序运行这些操作的功能。此功能基本上是Dispatcher提供的功能。这就是Event Loop,也称为:消息调度程序,消息循环,消息泵或运行循环。您也可以通过阅读Recator \ Proactor设计模式来查找信息。
This CodeProject页面显示了实现模式的一种方法,您可以使用Winrt组件使其更好\更方便\更熟悉