共享内存 - 读写锁 http://blog.csdn.net/aka_xingwenpeng/article/details/11671725 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 还是用mutex,可以跨进程,然后就是读写锁的逻辑了 把读写锁的状态信息放到共享内存,然后用一个mutex互斥对这个状态信息区的读写。当拿到对读写锁本身的访问权限后,读出读写锁状态。根据读写锁状态判断当前对于数据的访问是否允许,如果允许修改读写锁状态,放开mutex,然后该对数据区干嘛干嘛。如果当前状态不允许则麻烦些,放开mutex后等待在事件上,等通知吧,拿到通知后记得还是要重复上述操作直到成功。 第一步:定义函数:BOOL CShareMem::Lock(DWORD dwMilliSec){ if( WaitForSingleObject(m_hMutex,dwMilliSec) == WAIT_OBJECT_0) return TRUE; return FALSE;}BOOL CShareMem::Unlock(DWORD dwMilliSec){ return ReleaseMutex(m_hMutex);}第二步://创建互斥量m_hMutex = CreateMutex(NULL,FALSE,csMutexName);//创建共享内存第三步:使用 if( MySharedMem.Lock(100) )//加锁 { //读写数据代码 MySharedMem.Unlock();//解锁 } 其实用命名的event 或mutex都可以做到,根据名字用openevent或openmutex在其它进程可以打开,不过有时候受到进程优先级影响,可以提高进程权限以可以读取其它进程中的event或mutex. CGridCtrl问题 如何封闭网卡 请问大家都用什么软件来管理您的代码库? 如何进行视图切换? 我跟踪下去,一切正常,但是就是视图就是不变(始终为初始化的视图)?(附代码) WinMe下如何删除C:\_Restore文件夹? 看《C++ Primer》的人请注意 [ ... ]和< .. >中的语句是什么意思啊? ClassView不能显示类,怎么办? 关于CPropertySheet问题 使用VC++是否完全不使用makefile文件?(内空) 关于LoadBitmap的问题,求教!!! 失业了,求职,合肥的,有吗?
BOOL CShareMem::Lock(DWORD dwMilliSec)
{
if( WaitForSingleObject(m_hMutex,dwMilliSec) == WAIT_OBJECT_0)
return TRUE;
return FALSE;
}
BOOL CShareMem::Unlock(DWORD dwMilliSec)
{
return ReleaseMutex(m_hMutex);
}第二步:
//创建互斥量
m_hMutex = CreateMutex(NULL,FALSE,csMutexName);
//创建共享内存第三步:使用
if( MySharedMem.Lock(100) )//加锁
{
//读写数据代码
MySharedMem.Unlock();//解锁
}