我正在使用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
这可能是一个权限的问题? –
是的,它可以。但是从CreateProcess()文档中,我明白新创建的进程获得与“父进程”相同的权限? –
这是真的。现在父进程是否有权创建一个msg队列?你有没有试过在父proc中创建并查看它是否在那里工作? –