进程内通信 WinRT(消息替换)

Posted

技术标签:

【中文标题】进程内通信 WinRT(消息替换)【英文标题】:Intra-process communication WinRT (messages replacement) 【发布时间】:2012-10-08 06:43:56 【问题描述】:

我正在使用 Win32 的 WinRT 端口,但我遇到了线程和消息 (vc++11) 的问题。我只能在 WinRT 中使用线程池或 std::thread ...所以我实现了 std::thread,它似乎可以正常工作,但我该如何在它们之间进行通信线程?是否有其他选择(如 PostMessage() 等)?在 android 端口中,我们可以使用管道,但在 winrt 中没有任何内容:(

谢谢

【问题讨论】:

您混淆了线程和进程的概念。管道仅用于进程之间的通信,在 WinRT 中是不允许的。线程只需要一个线程安全队列。 @HansPassant:不是这样。 PostMessage() 用于两者。并且线程安全队列是不够的,你仍然需要一些东西来通知线程(当然,答案)。 PostMessage() 只是一种使用线程安全队列的方法。 Windows 消息队列。相当受限,最重要的是,在 WinRT 中不可用。 【参考方案1】:

std::conditional_variable 和 std::mutex 和纯 std::deque 应该可以解决问题。

【讨论】:

以上是关于进程内通信 WinRT(消息替换)的主要内容,如果未能解决你的问题,请参考以下文章

管道通信为啥比共享内存效率低

VC进程间通信之消息传递PostMessge()或SendMessage()

详解Android广播机制

进程间通信---共享内存

进程间通信——消息队列

系统引入消息队列的思考