HANDLE CreateFileMapping ( HANDLE hFile, // 映射文件的句柄,若设为0xFFFFFFFF(即:INVALID_HANDLE_VALUE)则创建一个进程间共享的对象 LPSECURITY_ATTRIBUTES lpFileMappingAttributes, //安全属性 DWORD flProtect, //保护方式 DWORD dwMaximumSizeHigh, //对象的大小 DWORD dwMaximumSizeLow, LPCTSTR lpName // 映射文件名,即共享内存的名称 );
HANDLE m_hMapFile=CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,0x1000," zzj");
void* m_pBaseMapFile=MapViewOfFile(m_hMapFile,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);
HANDLE m_hMapFile =OpenFileMapping(FILE_MAP_WRITE,FALSE," zzj");
void* m_pBaseMapFile=MapViewOfFile(m_hMapFile,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);
if (m_pBaseMapFile)
{
UnmapViewOfFile(m_pBaseMapFile);
SharedMapView=NULL;
}
HANDLE CreateFileMapping( //返回FileMapping Object的句柄 HANDLE hFile, //想要产生映射的文件的句柄 LPSECURITY_ATTRIBUTES lpAttributes, //安全属性(只对NT和2000生效) DWORD flProtect, //保护标致 DWORD dwMaximumSizeHigh, //在DWORD的高位中存放 File Mapping Object //的大小 DWORD dwMaximumSizeLow, //在DWORD的低位中存放 File Mapping Object //的大小(通常这两个参数有一个为0) LPCTSTR lpName //File Mapping Object的名称。 );
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
using namespace std;
int main()
{
HANDLE hMutex = NULL;
HANDLE hFileMapping = NULL;
LPVOID lpShareMemory = NULL;
HANDLE hServerWriteOver = NULL;
HANDLE hClientReadOver = NULL;
//create share memory
hFileMapping = CreateFileMapping(INVALID_HANDLE_VALUE,
NULL,
PAGE_READWRITE,
0,
1024*1024,
L"ShareMemoryTest");
if (NULL == hFileMapping)
{
cout << "CreateFileMapping fail:" << GetLastError() << endl;
goto SERVER_SHARE_MEMORY_END;
}
lpShareMemory = MapViewOfFile(hFileMapping,
FILE_MAP_ALL_ACCESS,
0,
0, //memory start address
0); //all memory space
if (NULL == lpShareMemory)
{
cout << "MapViewOfFile" << GetLastError() << endl;
goto SERVER_SHARE_MEMORY_END;
}
hMutex = CreateMutex(NULL, FALSE, L"SM_Mutex");
if (NULL == hMutex || ERROR_ALREADY_EXISTS == GetLastError())
{
cout << "CreateMutex" << GetLastError() << endl;
goto SERVER_SHARE_MEMORY_END;
}//多个线程互斥访问
//send data
hServerWriteOver = CreateEvent(NULL,
TRUE,
FALSE,
L"ServerWriteOver");
hClientReadOver = CreateEvent(NULL,
TRUE,
FALSE,
L"ClientReadOver");
if (NULL == hServerWriteOver ||
NULL == hClientReadOver)
{
cout << "CreateEvent" << GetLastError() << endl;
goto SERVER_SHARE_MEMORY_END;
}
char p = 0;
char* q = (char*)lpShareMemory;
do
{
p = getchar();
if (WaitForSingleObject(hClientReadOver, 5*1000) != WAIT_OBJECT_0)
goto SERVER_SHARE_MEMORY_END;
q[0] = p;
if (!ResetEvent(hClientReadOver)) goto SERVER_SHARE_MEMORY_END;//把指定的事件对象设置为无信号状态
if (!SetEvent(hServerWriteOver)) goto SERVER_SHARE_MEMORY_END;//把指定的事件对象设置为有信号状态
} while (p != '\n');
SERVER_SHARE_MEMORY_END:
//release share memory
if (NULL != hServerWriteOver) CloseHandle(hServerWriteOver);
if (NULL != hClientReadOver) CloseHandle(hClientReadOver);
if (NULL != lpShareMemory) UnmapViewOfFile(lpShareMemory);
if (NULL != hFileMapping) CloseHandle(hFileMapping);
if (NULL != hMutex) ReleaseMutex(hMutex);
return 0;
}
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
using namespace std;
int main()
{
HANDLE hMutex = NULL;
HANDLE hFileMapping = NULL;
LPVOID lpShareMemory = NULL;
HANDLE hServerWriteOver = NULL;
HANDLE hClientReadOver = NULL;
hMutex = OpenMutex(MUTEX_ALL_ACCESS,
FALSE,
L"SM_Mutex");
if (NULL == hMutex)
{
if (ERROR_FILE_NOT_FOUND == GetLastError())
{
cout << "OpenMutex fail: file not found!" << endl;
goto CLIENT_SHARE_MEMORY_END;
}
else
{
cout << "OpenMutex fail:" << GetLastError() << endl;
goto CLIENT_SHARE_MEMORY_END;
}
}
if (WaitForSingleObject(hMutex, 5000) != WAIT_OBJECT_0)//hMutex 一旦互斥对象处于有信号状态,则该函数返回
{
DWORD dwErr = GetLastError();
goto CLIENT_SHARE_MEMORY_END;
}
//open share memory
hFileMapping = OpenFileMapping(FILE_MAP_ALL_ACCESS,
FALSE,
L"ShareMemoryTest");
if (NULL == hFileMapping)
{
cout << "OpenFileMapping" << GetLastError() << endl;
goto CLIENT_SHARE_MEMORY_END;
}
lpShareMemory = MapViewOfFile(hFileMapping,
FILE_MAP_ALL_ACCESS,
0,
0,
0);
if (NULL == lpShareMemory)
{
cout << "MapViewOfFile" << GetLastError() << endl;
goto CLIENT_SHARE_MEMORY_END;
}
//read and write data
hServerWriteOver = CreateEvent(NULL,
TRUE,
FALSE,
L"ServerWriteOver");
hClientReadOver = CreateEvent(NULL,
TRUE,
FALSE,
L"ClientReadOver");
if (NULL == hServerWriteOver ||
NULL == hClientReadOver)
{
cout << "CreateEvent" << GetLastError() << endl;
goto CLIENT_SHARE_MEMORY_END;
}
char p = 0;
char* q = (char*)lpShareMemory;
do
{
if (!SetEvent(hClientReadOver))
goto CLIENT_SHARE_MEMORY_END;
if (WaitForSingleObject(hServerWriteOver, INFINITE) != WAIT_OBJECT_0)
goto CLIENT_SHARE_MEMORY_END;
p = q[0];
putchar(p);
if (!ResetEvent(hServerWriteOver))
goto CLIENT_SHARE_MEMORY_END;
} while (p != '\n');
CLIENT_SHARE_MEMORY_END:
//release share memory
if (NULL != hServerWriteOver) CloseHandle(hServerWriteOver);
if (NULL != hClientReadOver) CloseHandle(hClientReadOver);
if (NULL != lpShareMemory) UnmapViewOfFile(lpShareMemory);
if (NULL != hFileMapping) CloseHandle(hFileMapping);
if (NULL != hMutex) ReleaseMutex(hMutex);
return 0;
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有