VC 实现共享内存
来源:互联网 发布:苹果双系统删除mac 编辑:程序博客网 时间:2024/06/07 01:13
#ifndef _CSHAREMEMORY_H_#define _CSHAREMEMORY_H_/* * CopyRight (C) by dragonwarrior95@163.com. All rights is reserved. * Time: 2013.04.09 * File: CShareMemory.h * Function: This file is written to finish the memory shared. * Warning: If you want to use this class, you must init one object then to call back InitMemory() */#include <windows.h>#include <stdio.h>#include <string>#include <iostream>using namespace std;#define BUF_SIZE 1024class CShareMemory{public:LPVOID m_lpMemory;// to receive the value that MapViewOfFile returnpublic:CShareMemory(LPCTSTR lpName);~CShareMemory();bool InitMemory();LPVOID ReadMemory();bool ClearMemory();void WriteMemory(LPVOID lpVoid);private:LPCTSTR m_lpName; // name of mapping objectHANDLE m_hMapFile;// handle to map objectprotected:};#endif /*_CSHAREMEMORY_H_*/
#include "CShareMemory.h"#include <sstream>CShareMemory::CShareMemory(LPCTSTR lpName){if (NULL != lpName)m_lpName = lpName;elsem_lpName = NULL;m_lpMemory = new char[BUF_SIZE];m_hMapFile = NULL;}CShareMemory::~CShareMemory(){if (NULL != m_lpName)m_lpName = NULL;if (m_lpMemory != NULL) {UnmapViewOfFile(m_lpMemory);m_lpMemory = NULL;}if (m_hMapFile != NULL) {CloseHandle(m_hMapFile);m_hMapFile = NULL;}}bool CShareMemory::InitMemory(){if (m_lpName == NULL) {MessageBox(NULL, "m_lpName is NULL...", "Warning", 0);return false;}m_hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, // use paging fileNULL, // default security PAGE_READWRITE, // read/write access0, // max. object size BUF_SIZE+1, // buffer size m_lpName); // name of mapping objectif (m_hMapFile == NULL) { printf("Could not create file mapping object (%d).\n", GetLastError());return false;}m_lpMemory = MapViewOfFile(m_hMapFile, // handle to map objectFILE_MAP_ALL_ACCESS, // read/write permission0, 0, BUF_SIZE); if (m_lpMemory == NULL) { printf("Could not map view of file (%d).\n", GetLastError()); return false;}return true;}LPVOID CShareMemory::ReadMemory(){ return m_lpMemory;}bool CShareMemory::ClearMemory(){if (m_lpMemory != NULL)delete [] m_lpMemory;elsereturn false;return true;}void CShareMemory::WriteMemory(LPVOID lpVoid){if (NULL == lpVoid)m_lpMemory = NULL;elseCopyMemory((char *)m_lpMemory, (char *)lpVoid, strlen((char *)lpVoid));}DWORD WINAPI ThreadProc1(LPVOID lpVoid);DWORD WINAPI ThreadProc2(LPVOID lpVoid);int main(){HANDLE handle1 = CreateThread(NULL, 0, ThreadProc1, NULL, NULL, NULL);HANDLE handle2 = CreateThread(NULL, 0, ThreadProc2, NULL, NULL, NULL);CloseHandle(handle1);CloseHandle(handle2);getchar();return 0;}DWORD WINAPI ThreadProc1(LPVOID lpVoid){char buffer[128] = {0};CShareMemory *client = new CShareMemory("SHAREMEMORY");client->InitMemory();int count=0;while(1) {//if (client->ReadMemory() != NULL)//continue;stringstream str;count++;str<<count;strcpy(buffer,"thread1 write 我是写入的数据");strcat(buffer,str.str().c_str());client->WriteMemory((LPVOID)buffer);cout<<buffer<<endl;Sleep(1500);}delete client;return 0;}DWORD WINAPI ThreadProc2(LPVOID lpVoid){char buffer[128] = {0};CShareMemory *server = new CShareMemory("SHAREMEMORY");server->InitMemory();while(1) {strcpy(buffer, (char *)server->ReadMemory());if (NULL != buffer) {cout<<"thread2 read:读物 "<<buffer<<endl;}Sleep(1000);}delete server;return 0;}
0 0
- VC 实现共享内存
- VC中进程间共享内存实现
- vc++ 共享内存
- VC 共享内存实现进程间大数据的交换
- VC 共享内存实现进程间大数据的交换
- VC 共享内存实现进程间大数据的交换
- VC共享内存实现进程间数据的交换
- VC共享内存实现进程间数据的交换
- 共享内存实现进程间数据的交换(VC)
- VC 共享内存实现进程间大数据的交换
- VC共享内存实现进程间数据的交换
- VC进程间共享内存的实现步骤
- nginx共享内存:共享内存的实现
- java实现共享内存
- php共享内存实现
- 共享内存实现原理
- php共享内存实现
- 共享内存实现
- Struts标签s:if数值判断
- redHat linux下安装hadoop 0.20.2, 并在windows下远程连接此hadoop,开发调试
- 要怎样努力,才能成为很厉害的人?
- 关于SAE本地环境最近更新后mysql_connect未定义问题
- 第七周作业
- VC 实现共享内存
- JS JAVA 判断是否微信浏览器
- python中thread的setDaemon、join的用法
- html5 实例[1] 小时钟
- Redhat Linux下部署Java EE应用服务(补充完善中)
- 圆角背景
- ubuntu 安装scim+googlepiyin
- Java的文件上传与下载
- 第六周作业二