发送端

#include "DBProc1.h"
#include <string>
#include <thread>
#include <boost/thread/thread.hpp>
using namespace boost::interprocess;
PLUG_COMPONENT_AUTO_REG(DBProc1)//DO NOT EDIT THIS
struct MyStruct
{
int a;
int b;
std::string s;
int v[];
};
//------------------------------------------------------------------------------------------------------------------ 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( * );
mapped_region mr(smo, read_write);
void* addr = mr.get_address();
MyStruct* my = new(addr)(MyStruct);
int i = ;
std::thread th([&]()
{
while (true)
{
{
scoped_lock<interprocess_mutex> lock(m_镜像->mutex);
my->a = ;
my->b = ;
char buf[];
itoa(i++, buf, );
my->s = buf;
my->v[] = ;
my->v[] = ;
my->v[] = ;
}
boost::this_thread::interruptible_wait();//这个需要放在外面,放在里面虽然当前放弃了时间片,但当前进程还是拥有锁,别的进程还是不能执行,所以需要放在外面
} });
getchar();
return true;
}
//------------------------------------------------------------------------------------------------------------------

接收端

#include "DBProc2.h"
#include <string>
#include <thread>
#include <boost/thread/thread.hpp>
PLUG_COMPONENT_AUTO_REG(DBProc2)//DO NOT EDIT THIS
struct MyStruct
{
int a;
int b;
std::string s;
int v[];
};
//------------------------------------------------------------------------------------------------------------------ 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 ()
{
{
scoped_lock<interprocess_mutex> lock(m_镜像->mutex);
MyStruct* mu = static_cast<MyStruct*>(addr);
std::cout << mu->s << std::endl;
}
boost::this_thread::interruptible_wait();//同理这个也需要放在外面
} });
getchar();
return true;
}
//------------------------------------------------------------------------------------------------------------------

用boost共享内存实现进程通信的例子的更多相关文章

  1. QSharedMemory共享内存实现进程间通讯(IPC)及禁止程序多开

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QSharedMemory共享内存实现进程间通讯(IPC)及禁止程序多开     本文地址:h ...

  2. ACE框架 基于共享内存的进程间通讯

    ACE框架将基于共享内存的进程间通讯功能,如其它IO组件或IPC组件一样,设计成三个组件.流操作组件ACE_MEM_Stream,连接器组件ACE_MEM_Connector,以及接收连接组件ACE_ ...

  3. 关于Linux下进程间使用共享内存和信号量通信的时的编译问题

    今天在编译一个使用信号量实现进程同步时,出现了库函数不存在的问题.如下图 编译结果实际上是说,没include相应的头文件,或是头文件不存在(即系统不支持该库函数) 但我man shm_open是可以 ...

  4. Windows进程通信-共享内存空间

    三个模块 1,game.exe,三个方法,控制台输入指令('A','B','R')分别控制三个方法的调用: 2,WGDll.dll,要注入到game进程中的dll文件: 3,myconsole.exe ...

  5. Java进程通信之映像文件共享内存

    Java进程通信之映像文件共享内存 1. 共享内存 vs 进程通信 对UNIX系统来说,共享内存分为一般共享内存和映像文件共享内存两种.但windows实际上只有影像文件共享内存一种. 而说到进程通信 ...

  6. Linux共享内存(一)

    inux系统编程我一直看 <GNU/LINUX编程指南>,只是讲的太简单了,通常是书和网络上的资料结合着来掌握才比较全面 .在掌握了书上的内容后,再来都其他资料 . 原文链接 http:/ ...

  7. Linux进程间通信 共享内存+信号量+简单样例

    每个进程都有着自己独立的地址空间,比方程序之前申请了一块内存.当调用fork函数之后.父进程和子进程所使用的是不同的内存. 因此进程间的通信,不像线程间通信那么简单.可是共享内存编程接口能够让一个进程 ...

  8. UnixIPC之共享内存

    Unix-IPC之共享内存 一,共享内存的概念 共享内存通信技术是一种最快的可用IPC形式,它是针对其他通信机制运行效率低和设计的新型通信技术(其他的如:信号量,管道,套接字等).这种通信技术往往与其 ...

  9. Windows进程通信 -- 共享内存(1)

    共享内存的方式原理就是将一份物理内存映射到不同进程各自的虚拟地址空间上,这样每个进程都可以读取同一份数据,从而实现进程通信.因为是通过内存操作实现通信,因此是一种最高效的数据交换方法. 共享内存在 W ...

随机推荐

  1. YARN内存使用优化配置

    在Hadoop2.0中, YARN负责管理MapReduce中的资源(内存, CPU等)并且将其打包成Container. 这样可以精简MapReduce, 使之专注于其擅长的数据处理任务, 将无需考 ...

  2. 【转】Spark 体系结构

    原文地址:http://jerryshao.me/architecture/2013/03/29/spark-overview/ 援引@JerryLead的系统架构图作为Spark整体结构的一个 bi ...

  3. 小木棍 (codevs 3498)题解

    [问题描述] 乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过100. 现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍和它们的长度. 给出每段小木棍的长 ...

  4. jQuery学习笔记(2)

    val() 当鼠标放上去的时候,文本消失,鼠标拿开,文本恢复 效果图: code as below: <html xmlns="http://www.w3.org/1999/xhtml ...

  5. S3C2440 LCD驱动(FrameBuffer)实例开发<一>(转)

    1. 背景知识 在多媒体的推动下,彩色LCD越来越多地应用到嵌入式系统中,PDA和手机等大多都采用LCD作为显示器材,因此学习LCD的应用很有实际意义! LCD工作的硬件需求:要使一块LCD正常的显示 ...

  6. 【转载/修改】ScrollLayout代码修正,追加模仿viewpager滚动速度

    组件作用为类似ViewPager但直接插视图的横向滚动容器. 修改自:http://blog.csdn.net/yaoyeyzq/article/details/7571940 在该组件基础上修正了滚 ...

  7. goto语句 switch语句

    goto语句 #include <iostream> using namespace std; int main() { int i = 1; number: i++; std::cout ...

  8. Python数学运算

    python中的加减乘除比其他的语言简单,不需要对其赋值变量 (1)加减乘除 ) #加法 ) #减法 ) #乘法 ) #除法 5.0 ) #乘方 (2)判断 判断返回的是True或者False ) # ...

  9. Mysql允许外网接入

    首先你可以为mysql创建一个账户,或者为root用户接入数据库. 授权用户指定所有主机以指定用户连接服务器 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDE ...

  10. 关于生成缩略图及水印图片时出现GDI+中发生一般性错误解决方法

    System.Drawing.Image OldImage = null; oldImage = System.Drawing.Image.FromFile(ImageUrl); 使用该方法读取图片时 ...