小弟在使用内存映射技术进行进程间通信,进程A在每次发送数据的时候均执行如下过程,
映射已经使用CreateFileMapping创建好的内存映射文件到本进程的地址空间,
如果成功,则使用此地址,写入数据;如果不成功,则关闭内存映射文件的句柄,重新
创建之,并再次映射。此段逻辑代码在某些机器上长时间运行无误,在有些机器上则会运行若干小时后发生映射
失败的情况,并在内存映射文件重新创建后,仍旧失败。百思不得其解,请指教运行环境:Windows 2K NTFS文件系统buf_s_pri_p = MapViewOfFile(buf_s_pri, FILE_MAP_WRITE, 0, 0, 0);
if(buf_s_pri_p == NULL)
{
CloseHandle(buf_s_pri);buf_s_pri = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, getSBufSize() * 1024, getSBufName());if(buf_s_pri == NULL)
return false;buf_s_pri_p = (Private_Buf*)MapViewOfFile(buf_s_pri, FILE_MAP_WRITE, 0, 0, 0);
if(buf_s_pri_p == NULL)
return false;
}
映射已经使用CreateFileMapping创建好的内存映射文件到本进程的地址空间,
如果成功,则使用此地址,写入数据;如果不成功,则关闭内存映射文件的句柄,重新
创建之,并再次映射。此段逻辑代码在某些机器上长时间运行无误,在有些机器上则会运行若干小时后发生映射
失败的情况,并在内存映射文件重新创建后,仍旧失败。百思不得其解,请指教运行环境:Windows 2K NTFS文件系统buf_s_pri_p = MapViewOfFile(buf_s_pri, FILE_MAP_WRITE, 0, 0, 0);
if(buf_s_pri_p == NULL)
{
CloseHandle(buf_s_pri);buf_s_pri = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, getSBufSize() * 1024, getSBufName());if(buf_s_pri == NULL)
return false;buf_s_pri_p = (Private_Buf*)MapViewOfFile(buf_s_pri, FILE_MAP_WRITE, 0, 0, 0);
if(buf_s_pri_p == NULL)
return false;
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货