首页 > 代码库 > 用boost共享内存实现进程通信的例子
用boost共享内存实现进程通信的例子
发送端
#include "DBProc1.h"#include <string>#include <thread>#include <boost/thread/thread.hpp>using namespace boost::interprocess;PLUG_COMPONENT_AUTO_REG(DBProc1)//DO NOT EDIT THISstruct MyStruct{ int a; int b; std::string s; int v[3];};//------------------------------------------------------------------------------------------------------------------DBProc1::DBProc1(){}DBProc1::~DBProc1(){}bool DBProc1::test(){ shared_memory_object mu(open_or_create, "mutex", read_write); mu.truncate(sizeof(镜像)); mapped_region mru(mu, read_write); void* addrmu = mru.get_address(); m_镜像 = new(addrmu)镜像; shared_memory_object smo(open_or_create, "gongxiang", read_write); smo.truncate(10 * 1024); mapped_region mr(smo, read_write); void* addr = mr.get_address(); MyStruct* my = new(addr)(MyStruct); int i = 100; std::thread th([&]() { while (true) { { scoped_lock<interprocess_mutex> lock(m_镜像->mutex); my->a = 1; my->b = 2; char buf[20]; itoa(i++, buf, 10); my->s = buf; my->v[0] = 90; my->v[1] = 80; my->v[2] = 70; } boost::this_thread::interruptible_wait(1000);//这个需要放在外面,放在里面虽然当前放弃了时间片,但当前进程还是拥有锁,别的进程还是不能执行,所以需要放在外面 } }); getchar(); return true;}//------------------------------------------------------------------------------------------------------------------
接收端
#include "DBProc2.h"#include <string>#include <thread>#include <boost/thread/thread.hpp>PLUG_COMPONENT_AUTO_REG(DBProc2)//DO NOT EDIT THISstruct MyStruct{ int a; int b; std::string s; int v[3];};//------------------------------------------------------------------------------------------------------------------DBProc2::DBProc2(){}DBProc2::~DBProc2(){}bool DBProc2::test(){ shared_memory_object shm(open_only ,"mutex" ,read_write); mapped_region mu(shm ,read_write); void * addrmu = mu.get_address(); m_镜像 = static_cast<镜像*>(addrmu); shared_memory_object sho(open_only ,"gongxiang" ,read_write); mapped_region mr(sho ,read_write); void * addr = mr.get_address(); std::thread th([=]() { while (1) { { scoped_lock<interprocess_mutex> lock(m_镜像->mutex); MyStruct* mu = static_cast<MyStruct*>(addr); std::cout << mu->s << std::endl; } boost::this_thread::interruptible_wait(1000);//同理这个也需要放在外面 } }); getchar(); return true;}//------------------------------------------------------------------------------------------------------------------
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。