2012-09-14 36 views
1

我正在使用Boost Interprocess实现进程间通信。 作为一个测试,我从boost documentation的例子。如何使用Windows的Boost进程间消息队列?

第一处理(这将创建的消息队列)开始另一个使用CreateProcess(NULL, (LPSTR)commandStream.str().c_str(), NULL, NULL, FALSE, NULL, NULL, NULL, &si, &pi)

第一进程创建使用message_queue mq(create_only, "message_queue", 100, sizeof(int))队列(它应该接收从队列中的消息)。

不幸的是,message_queue mq(open_only, "message_queue")抛出interprocess_exception。例外包含说明Das System can an die angegebene Datei nicht finden。(系统找不到请求的文件)。

当队列的创建和打开都在一个进程中完成时,不会抛出异常并且通信按照文档中的描述工作。

有人知道什么可能会导致异常,我如何解决它?

编辑:我使用Boost 1.45

+0

这可能是一个权限的问题? –

+0

是的,它可以。但是从CreateProcess()文档中,我明白新创建的进程获得与“父进程”相同的权限? –

+0

这是真的。现在父进程是否有权创建一个msg队列?你有没有试过在父proc中创建并查看它是否在那里工作? –

回答

2

唯一的例外是在加速中this ticket描述Interpocessing库中的问题引起的。该错误已被重新打开,我不完全清楚Boost代码是如何改变的,以及如何为Boost 1.45应用一种解决方法。 但是,在升级到Boost 1.51后,我现在可以按预期使用Message Queue了。