gpt4 book ai didi

C++ boost::interprocess 简单应用

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:40:19 25 4
gpt4 key购买 nike

我想用 boost 编写一个简单的应用程序,将字符串对象传递给其他进程。它编译得很好,但是当我尝试从第二个进程打印出字符串时,以下消息被发送到控制台并且第二个进程崩溃:

../boost_1_44_0/boost/interprocess/sync/posix/interprocess_recursive_mutex.hpp:107: void boost::interprocess::interprocess_recursive_mutex::unlock(): Assertion `res == 0' failed.

第一个流程代码:

shared_memory_object::remove(SHARED_MEMORY_NAME);
managed_shared_memory mshm(create_only, SHARED_MEMORY_NAME, SHARED_MEMORY_SIZE );
mshm.construct<string>( IP_STRING_NAME )("Message to other process");
string syscall(argv[0]);
std::system( (syscall+" &").c_str() ); //starting second process

第二个流程代码:

managed_shared_memory mshm( open_or_create, SHARED_MEMORY_NAME, SHARED_MEMORY_SIZE  );
std::pair<string * , size_t > p= mshm.find<string>(IP_STRING_NAME);
cout<<"string is "<<*p.first<<endl;

如何让我的应用程序正常工作?

最佳答案

从你的代码中不清楚你是指 boost::interprocess::string 还是 std::string,但从我几个小时的 boost::interprocess(相当令人沮丧...)经验来看,你既不想要...

所以,这是一个

boost::interprocess 中的字符串快速指南

首先,你需要定义一个特殊的字符串:

typedef boost::interprocess::allocator<char, boost::interprocess::managed_shared_memory::segment_manager> CharAllocator; 
typedef boost::interprocess::basic_string<char, std::char_traits<char>, CharAllocator> my_string;

其次,发送app应该使用:

// (mshm is the managed_shared_memory instance from the question)
mshm.construct<my_string>( SOME_STRINGY_NAME )(
"Message to other process",
mshm.get_segment_manager());

最后,阅读应用应该:

std::pair<my_string * , size_t > p= mshm.find<my_string>(SOME_STRINGY_NAME);
cout<< "got " << p.second << " strings " << endl;
cout<< "first string is->"<<p.first->c_str()<<endl;

注意:所有这些复杂性的原因是 this .

干杯

关于C++ boost::interprocess 简单应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4278627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com