C++ 进程间共享内存-实现进程同步

参考原文:http://blog.csdn.net/liuguangsh/article/details/52130177
11月3日改用事件方式实现进程间同步!
// 一,读共享内存源代码

// //ShareMemory_Read.cpp : 定义控制台应用程序的入口点。

#include "stdafx.h"
#include "cv.h"
#include "cxcore.h"
#include "highgui.h"
#include 
#include "opencv2/opencv.hpp"
#include "opencv2/highgui/highgui.hpp"
#include   
#include "afxwin.h"
//==========================================
#include "stdafx.h"
#include  
#include  
#include  
char name[100] = "BeiJing-LingYun"; 

HANDLE hNewImageEvent;
HANDLE hDoneEvent;
LPVOID lpBase;
HANDLE hMapFile;
//==========================================

using namespace cv;
using namespace std;


#define BUF_SIZE 5038848   //2592*1944
//#define BUF_SIZE 4096   //2592*1944

#define Img_Width  2592
#define Img_Height 1944


int ImgSaveIndex=0;

int main()  
{  

	hNewImageEvent=0;
	hDoneEvent=0;

	// 打开共享的文件对象
	char *szBuffer= new char[BUF_SIZE];

	hDoneEvent = CreateEvent(NULL, false, false, "JD_DoneEvent");  //创建事件
	while (!hNewImageEvent)
	{
		hNewImageEvent = OpenEvent(STANDARD_RIGHTS_ALL, false, "JD_NewImageEvent");
	}
	while (true)
	{
		WaitForSingleObject(hNewImageEvent, INFINITE);
		
		//-------------图像处理-----------------------------------------------------------------
		hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS,NULL,"ShareMemory");
		if (hMapFile!=0)
		{
			lpBase = MapViewOfFile(hMapFile,FILE_MAP_ALL_ACCESS,0,0,0);

			// 将共享内存数据拷贝出来
			strcpy(szBuffer,(char*)lpBase);

			----------------存储图像---------------------------------------
			//cout<

//二,创建共享内存源代码:

	 ShareMemory_Create.cpp : 定义控制台应用程序的入口点。

//
#include "stdafx.h"
//--------互斥量---------------------------------------------------
#include   
#include  //getch();  头文件
#include  
//--------互斥量---------------------------------------------------

#include 
#include "iostream"
using namespace std;

#define BUF_SIZE 4096

char name[100] = "BeiJing-LingYun"; 
LPVOID lpBase;
HANDLE hMapFile;
HANDLE hNewImageEvent;
HANDLE hDoneEvent;


int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
	//-----------------------------------------------------------------------------
	int index=0;
	char szBuffer[20];
	//-----------共享内存-----------------------------------
	hMapFile=0;
	hNewImageEvent=0;
	hDoneEvent=0;
	// 创建共享文件句柄 
	hMapFile = CreateFileMapping(
		INVALID_HANDLE_VALUE,   // 物理文件句柄
		NULL,                   // 默认安全级别
		PAGE_READWRITE,         // 可读可写
		0,                      // 高位文件大小
		BUF_SIZE,               // 地位文件大小
		"ShareMemory"           // 共享内存名称
		);

	// 映射缓存区视图 , 得到指向共享内存的指针
	lpBase = MapViewOfFile(
		hMapFile,                // 共享内存的句柄
		FILE_MAP_ALL_ACCESS,     // 可读写许可
		0,
		0,
		BUF_SIZE
		);

	hNewImageEvent = CreateEvent(NULL, false, false, "JD_NewImageEvent");

	while (!hDoneEvent)
	{
		hDoneEvent = OpenEvent(STANDARD_RIGHTS_ALL, false, "JD_DoneEvent");
	}
	//-----------共享内存-----------------------------------
	//-----------------------------------------------------------------------------
	while (true)
	{
		// 线程挂起等其他线程读取数据
		Sleep(1000);
		
		// 定义共享数据
		index++;

		cout<

欢迎扫码关注我的微信公众号

在这里插入图片描述

你可能感兴趣的:(C++)