0, // 高位文件大小
BUF_SIZE, // 地位文件大小
"ShareMemory" // 共享内存名称
);
// 映射缓存区视图 , 得到指向共享内存的指针
lpBase = MapViewOfFile(
hMapFile, // 共享内存的句柄
FILE_MAP_ALL_ACCESS, // 可读写许可
0,
0,
BUF_SIZE
);
// 将数据拷贝到共享内存
strcpy((char*)lpBase,pDlg->m_pShareDate);
// 线程挂起等其他线程读取数据
Sleep(200);
delete [] pDlg->m_pShareDate;//清空共享内存
pDlg->m_pShareDate=NULL; //
}
else
{
AfxMessageBox(_T("MatToChar格式转换失败"));
}
//--------释放互斥量---------------------------
pDlg->MyReleaseMutex();
//======共享内存=================================
// 解除文件映射
UnmapViewOfFile(lpBase);
// 关闭内存映射文件对象句柄
CloseHandle(hMapFile);
//---------------共享内存------------------------------------------------------------------------
//释放互斥量 函数
bool CCameraTimeDlg::MyReleaseMutex()
{
//互斥量在内核创建。
// 参数:1、指向安全属性的指针,
//2、 初始化互斥对象的所有者,如创建进程希望立即拥有互斥体,则设为TRUE。一个互斥体同时只能由一个线程拥有
//3、 指向互斥对象名的指针
//一旦不再需要,注意必须用CloseHandle函数将互斥体句柄关闭。
HANDLE mutex = CreateMutex(NULL, TRUE, name);
if (mutex)
{
Sleep(10);
//printf("创建成功!\n");
char ch = getch();
ReleaseMutex(mutex); //离开互斥区
CloseHandle(mutex); //关闭资源
}
else
{
return false;
}
return true;
}
|