Windows 进程间通信 共享内存
向内存中写数据
1 // SharedMemorySample_write_main.cpp
2 #include <SDKDDKVer.h>
3 #include <Windows.h>
4 #include <stdio.h>
5
6 int main(int argc, char* argv[])
7 {
8 int shmem_size = 16; // 16byte
9 HANDLE shmem = INVALID_HANDLE_VALUE;
10 HANDLE mutex = INVALID_HANDLE_VALUE;
11
12 mutex = ::CreateMutex(NULL, FALSE, "mutex_sample_name");
13
14 shmem = ::CreateFileMapping(
15 INVALID_HANDLE_VALUE,
16 NULL,
17 PAGE_READWRITE,
18 0,
19 shmem_size,
20 "shared_memory_name"
21 );
22
23 char *buf = (char*)::MapViewOfFile(shmem, FILE_MAP_ALL_ACCESS, 0, 0, shmem_size);
24
25
26 for (unsigned int c = 0; c < 60; ++c) {
27 // mutex lock
28 WaitForSingleObject(mutex, INFINITE);
29
30 // write shared memory
31 memset(buf, c, shmem_size);
32
33 printf("write shared memory...c=%d\n", c);
34
35 // mutex unlock
36 ::ReleaseMutex(mutex);
37
38 ::Sleep(1000);
39 }
40
41 // release
42 ::UnmapViewOfFile(buf);
43 ::CloseHandle(shmem);
44 ::ReleaseMutex(mutex);
45
46 return 0;
47 }
从内存中读数据
1 // SharedMemorySample_read_main.cpp
2 #include <SDKDDKVer.h>
3 #include <Windows.h>
4 #include <stdio.h>
5
6 int main(int argc, char* argv[])
7 {
8 int shmem_size = 16; // 16byte
9 HANDLE shmem = INVALID_HANDLE_VALUE;
10 HANDLE mutex = INVALID_HANDLE_VALUE;
11
12 mutex = ::CreateMutex(NULL, FALSE, "mutex_sample_name");
13
14 shmem = ::CreateFileMapping(
15 INVALID_HANDLE_VALUE,
16 NULL,
17 PAGE_READWRITE,
18 0,
19 shmem_size,
20 "shared_memory_name"
21 );
22
23 char *buf = (char*)::MapViewOfFile(shmem, FILE_MAP_ALL_ACCESS, 0, 0, shmem_size);
24
25
26 for (unsigned int c = 0; c < 60; ++c) {
27 // mutex lock
28 WaitForSingleObject(mutex, INFINITE);
29
30 printf("read shared memory...c=%d\n", buf[0]);
31
32 // mutex unlock
33 ::ReleaseMutex(mutex);
34
35 ::Sleep(1000);
36 }
37
38 // release
39 ::UnmapViewOfFile(buf);
40 ::CloseHandle(shmem);
41 ::ReleaseMutex(mutex);
42
43 return 0;
44 }
Windows 进程间通信 共享内存的更多相关文章
- Windows进程间通信--共享内存映射文件(FileMapping)--VS2012下发送和接收
之前以为两个互不相关的程序a.exe b.exe通信就只能通过网络,人家说可以通过发消息,我还深以为不然,对此,我表示万分惭愧. 之前课本上说的进程间通信,有共享内存.管道等之类的,但没有自己操刀写过 ...
- 利用windows api共享内存通讯
主要涉及CreateFile,CreateFileMapping,GetLastError,MapViewOfFile,sprintf,OpenFileMapping,CreateProcess Cr ...
- C# 进程间通信(共享内存)
原文:C# 进程间通信(共享内存) 进程间通信的方式有很多,常用的方式有: 1.共享内存(内存映射文件,共享内存DLL). 2.命名管道和匿名管道. 3.发送消息 本文是记录共享内存的方式进行进程间通 ...
- windows 下共享内存使用方法示例
windows下共享内存使用方法较 linux 而言微微复杂 示例实现的功能 有一个视频文件,一块内存区域 : 程序 A,将该视频写入该内存区域 : 程序 B,从该内存区域读取该视频 : 代码模块实现 ...
- Linux环境进程间通信: 共享内存
Linux环境进程间通信: 共享内存 第一部分 共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式.两个不同进程A.B共享内存的意思是,同一块物理内存被映射到进程A.B各自的进程地址空间.进 ...
- linux进程间通信-共享内存
转载:http://www.cnblogs.com/fangshenghui/p/4039720.html 一 共享内存介绍 共享内存可以从字面上去理解,就把一片逻辑内存共享出来,让不同的进程去访问它 ...
- win32下进程间通信——共享内存
一.引言 在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯.WIN32 API提供了许多函数使我们能够方便高效的进行进程间的通讯,通过这些函数我们可以控制不同进程间的数据交换 ...
- Linux下进程间通信--共享内存:最快的进程间通信方式
共享内存: 一.概念: 共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式.两个不同进程A.B共享内存的意思是,同一块物理内存被映射到进程A.B各自的进程地址空间. 进程A可以即时看到进程B ...
- C++ windows下共享内存
转载:https://blog.csdn.net/tojohnonly/article/details/70246965 共享内存 (也叫内存映射文件) 主要是通过映射机制实现的 , Windows ...
- Linux进程间通信—共享内存
五.共享内存(shared memory) 共享内存映射为一段可以被其他进程访问的内存.该共享内存由一个进程所创建,然后其他进程可以挂载到该共享内存中.共享内存是最快的IPC机制,但由于linux本身 ...
随机推荐
- java学习:八大基本类型变量
1.类 在java中用class来定义一个类,类是java程序的基本单位 类描述的是具有共性的一类事物,所以我们又可以把类称作为模板技术 如何理解共性: 具有相同的属性-->java变量 具 ...
- CTF学习笔记(三)php部分
三.常见PHP用法与漏洞 (〇)php的备份文件与phps php的备份文件一般是*.php.bak,在根目录下输入/index.php.bak, 下载 备份文件. phps文件就是php的源代码文件 ...
- docker rabbitMQ安装
1.环境准备 服务器 CENTOS 7 版本 安装docker容器 2.开始安装 docker pull rabbitmq:management 说明:为什么不直接安装 docker pull rab ...
- HANDLE和HMOUDLE、HWND讲解
HWND是线程相关的,通常指明窗口句柄,通过句柄找到窗口所属进程和线程 Handle 是代表系统的内核对象,如文件句柄,线程句柄,进程句柄.系统对内核对象以链表的形式进行管理,载入到内存中的每一个内核 ...
- 使用IDEA+Tomcat部署web项目记录
使用IDEA+Tomcat部署web项目记录 本文已同步发布于CSDN JDK版本:1.8(请自行配好环境变量) IDEA版本:2019.3 Tomcat版本:9.0.39 1.新建project和m ...
- flutter SliverPersistentHeader子组件透明度渐变【滑动悬停appbar添加自定义组件的透明度】
在开发flutter悬停头部中,发现一个问题. 我们通常使用SliverAppBar(),去实现悬停的功能,在使用appbar的时候满足不了我们的需求,就需要自定义, 如下:在title中写了一个搜索 ...
- PowerShell Regex
PowerShell默认按每一行遍历去匹配模式 比如"aaa`nbbb"用"a.*b"是匹配不到的 需要用"(?s)a.*b"来匹配 1. ...
- idea的操作快捷键
IDEA调试快捷键 F8 跳到下一步 相当于eclipse的F6 F7 进入到方法 相当于eclipse 的F7 F9 恢复程序到下一个断点 相当于eclispe的 进入下一个断点 shift+F8 ...
- PyCharm的安装使用
一.安装 1.进入官网点击下载 2.打开文件夹 3.点击next 4.选择安装路径 5.勾选创建桌面图标选项,点击next 6.点击安装 二.使用 1.import pycharm setting是指 ...
- python中如果获取对象的内存地址,及字典的地址
在python中,如果查看一个对象的内存地址,可以用到id这个内置函数:使用方式是: id(object)--->返回该对象的10进制的内存地址: 以下是官方定义:翻译为大白话就是,返回一个对象 ...