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本身 ...
随机推荐
- reduced form(简化式)和structural form(结构式)
在复习软件构造的时候,我发现了这样一道练习题 例题要求我们对照给出的RI和AF画出相应的映射图.在这里产生了一个疑问,什么是reduced form?是分子小于分母的意思吗? 但是根据给出的答案,并不 ...
- iOS 导航栏消失
iOS15 导航栏在静止时,设置的图片会透明,以及消失. 解决如下 if (@available(iOS 13.0, *)) { UINavigationBarAppearance *appearan ...
- 使用vue渲染大量数据时应该怎么优化?
Object.freeze 适合一些 big data的业务场景.尤其是做管理后台的时候,经常会有一些超大数据量的 table,或者一个含有 n 多数据的图表,这种数据量很大的东西使用起来最明显的感受 ...
- 搭建CentOS 7
首先,操作系统要部署在哪一个盘符下就在哪一个盘符下创建一个空文件夹,用来存放实验环境.这里的实验环境的文件夹可以命名为CentOS 7 x64. VMware中,"文件"--&qu ...
- JS时间处理,兼容IOS
timeFormatting(val) { let time = val.slice(0, 10) // 兼容IOS time = time.replace(/-/g, '/') let date = ...
- COMMON_FUNC_SPLIT_STRING
void SplitString(const std::string& s, std::vector<std::string>& v, const std::string& ...
- 树莓派zero W ,连接墨水屏(2.13inch_e-Paper_HAT (V3))
墨水瓶型号: 2.13inch_e-Paper_HAT (V3) https://www.waveshare.net/wiki/2.13inch_e-Paper_HAT 与树莓派 Zero 连接 ...
- mysql sum 聚合计算后精度不准 出现多位小数点后的数
解决办法 原收款单money 字段 为 decimal(28,8) 经过层层计算用到了 @total := ( beginning + @total + gather - verification ) ...
- ider git Reset Type 使用记录
Soft:在选定提交点之后所做的所有更改都将被暂存(这意味着可以到 Version Control 窗口(Alt+9)的Local Changes 选项卡,以便您可以查看它们,并在必要时稍后提交). ...
- 使用python启动appium(虚拟器)
1.先安装各种库 https://www.cnblogs.com/zhanglingling00/p/14169462.html pip install Appium-Flutter-Finder p ...