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本身 ...
随机推荐
- Laravel ORM 常用方法
1. 数据查询 ->find($id); //需要一个主键$id并返回一个模型对象.若不存在则返回null ->findOrFail($id); //需要一个主键$id并返回一个模型对 ...
- ES5 绑定 this 的方法
this的动态切换,固然为 JavaScript 创造了巨大的灵活性,但也使得编程变得困难和模糊.有时,需要把this固定下来,避免出现意想不到的情况.JavaScript 提供了call.apply ...
- 处理Android的物理后退按钮
在文章.聊天.联系.相册四个页面时,用户点击Android 物理键返回,需要直接退出程序.我这里处理很简单,直接使用react-navigation的属性backbehavior就很快的解决了. &l ...
- ASP.NET Core Filter如何支持依赖注入
通过Filter来支持:分别有IResourceFilter AuthorizeFilter ActionFilter ExceptionFilter ResultFilter,Filter也被称为拦 ...
- nginx 结合tomcat 双机热备
相信很多人都听过nginx,这个小巧的东西慢慢地在吞食apache和IIS的份额.那究竟它有什么作用呢?可能很多人未必了解. 说到反向代理,可能很多人都听说,但具体什么是反向代理,很多人估计就不清楚了 ...
- 环保行业ERP主要的几大治理区域?
环保行业是指在国民经济结构中,以防治环境污染.改善生态环境.保护自然资源为目的而进行的技术产品开发.商业流通.资源利用.信息服务.工程承包等活动的总称. 哲讯环保ERP行业产业链的上游主要是钢铁.有色 ...
- linux中用命令导出、导入mysql数据库表
一.导出数据 1.使用场景:在没有数据库可视化工具的情况下备份导出数据库. 命令如下: mysqldump -u用户名 -p 数据库名 > 数据库名.sql mysqldump -u root ...
- 5.mysql的explain的分析
执行分析: 1.id 含义:表示查询的子句或者操作表的顺序 三种情况:id 相同,执行的顺序由上到下: id不同,id越大优先级越高,越先执行: id相同不相同同时存在: 2.select_type ...
- django日志集成输出器
在配置文件中 import os # ⽇志 LOGGING = { 'version': 1, # 自定义一个简单版本 'disable_existing_loggers': False, # 是否禁 ...
- liunx查看端口使用情况
netstat -ntlp //查看当前所有tcp端口