windows共享内存示例
来源:互联网 发布:淘宝用什么修图软件 编辑:程序博客网 时间:2024/05/22 18:38
http://www.cnblogs.com/lihaozy/archive/2012/08/14/2638009.html
一则简单的Windows共享内存IPC代码
Windows共享内存可以让两个进程对同一块内存进行读写。
以下有2个进程,a.cpp生成A进程,b.cpp生成b进程。那么a进程将不停地读名为"Global\\MyFileMappingObject"的共享内存块,而b进程不停地写名为"Global\\MyFileMappingObject"的共享内存块。从而实现IPC。
//a.cpp#include <windows.h>#include <string.h>#include <string>#include <iostream>#include <tchar.h>using namespace std;#define BUF_SIZE 256TCHAR szName[]=TEXT("Global\\MyFileMappingObject"); //指向同一块共享内存的名字int main(int argc, char *argv[]){ HANDLE hMapFile; LPCTSTR pBuf; hMapFile = CreateFileMapping( INVALID_HANDLE_VALUE, // use paging file NULL, // default security PAGE_READWRITE, // read/write access 0, // maximum object size (high-order DWORD) BUF_SIZE, // maximum object size (low-order DWORD) szName); // name of mapping object if (hMapFile == NULL) { _tprintf(TEXT("Could not create file mapping object (%d).\n"), GetLastError()); return 1; } pBuf = (LPTSTR) MapViewOfFile(hMapFile, // handle to map object FILE_MAP_ALL_ACCESS, // read/write permission 0, 0, BUF_SIZE); if (pBuf == NULL) { _tprintf(TEXT("Could not map view of file (%d).\n"), GetLastError()); CloseHandle(hMapFile); return 1; } //从main开始至此,A B process代码一样,都是获取名为"Global\\MyFileMappingObject"的共享内存的指针 //以下代码,A不停地读共享内存pBuf while(1) { cout<<pBuf<<endl; cout<<"A process: hit keyboard to receive from B process"<<endl; getchar(); } UnmapViewOfFile(pBuf); CloseHandle(hMapFile); return 0;}
//b.cpp#include <iostream>#include <Windows.h>#include <tchar.h>using namespace std;#define BUF_SIZE 256TCHAR szName[]=TEXT("Global\\MyFileMappingObject"); //指向同一块共享内存的名字int main(){ HANDLE hMapFile; LPCTSTR pBuf; hMapFile = CreateFileMapping( INVALID_HANDLE_VALUE, // use paging file NULL, // default security PAGE_READWRITE, // read/write access 0, // maximum object size (high-order DWORD) BUF_SIZE, // maximum object size (low-order DWORD) szName); // name of mapping object if (hMapFile == NULL) { _tprintf(TEXT("Could not create file mapping object (%d).\n"), GetLastError()); return 1; } pBuf = (LPTSTR) MapViewOfFile(hMapFile, // handle to map object FILE_MAP_ALL_ACCESS, // read/write permission 0, 0, BUF_SIZE); if (pBuf == NULL) { _tprintf(TEXT("Could not map view of file (%d).\n"), GetLastError()); CloseHandle(hMapFile); return 1; } //从main开始至此,A B process代码一样,都是获取名为"Global\\MyFileMappingObject"的共享内存的指针 //以下代码,B不停写共享内存pBuf while(1) { TCHAR s[BUF_SIZE]; cout<<"B process: plz input sth. to be transfered to A process."<<endl; cin>>s; memcpy((PVOID)pBuf, s, BUF_SIZE); }}
- windows共享内存示例
- Windows共享内存示例
- Windows共享内存示例
- Windows共享内存示例
- Windows下共享内存示例
- 内存共享代码示例
- 共享内存示例代码如下:
- shm共享内存使用示例
- Linux下共享内存示例
- linux中共享内存示例
- windows共享内存
- windows创建共享内存
- windows 共享内存使用说明
- Windows共享内存
- windows 共享内存
- Windows共享内存解析
- Windows共享内存
- windows进程共享内存技术
- Mac下修改文件属性的命令
- java 项目制作 bat 可执行文件
- 06 struts.xml的其他使用
- [129]Sum Root to Leaf Numbers
- RTP时间戳及相关
- windows共享内存示例
- 进程间通信 - 匿名管道实现
- JEECG 喜讯[后续推出功能]
- dib
- 进程间通信 - 命名管道实现
- 【discuz】遇到关于图片的操作就崩了?(如:imagecreatefromjpeg),修改php.ini的内容,把php_gd2.dll前面的;去掉
- 知道笔试结果,很伤心,却是意料之中
- 进程间通信 - 动态链接库实现
- 个人首页不更新