创建了一个复合文件,现在想使用多个线程对该复合文件下多个IStream对象所指数据区进行操作,但是如何保证针对同一IStream数据区只有一条线程在操作?尝试用了IStream对象中的IStream::LockRegion和IStream::UnlockRegion也无法满足要求。
解决方案 »
- 灰度图jpeg压缩
- 学MFC哪本书比较好,入门的?
- 问一下如何将Picture控件添加背景色呢??
- 怎样动态的登录域或注销?
- 问个关于WriteFile的问题
- 我下载了最新的platten sdk,需要用到ConvertSecurityDescriptorToStringSecurityDescriptor,已经包含了Sddl.h,引入了Advapi32.lib,为
- 像2003版本MSDN的界面,窗体能够自动隐藏M,FC该怎么实现啊?恳请各位帮个忙,在下不胜感谢呐!
- 怎么樣把兩個十六進製字符串閤成一個漢字輸齣來?(在綫狂等!!!)
- 什么样才能ping局域网的机子
- 如何得到当前屏幕并把它显示到View里,要简要代码
- 有没有巨牛,这个东西有些冷门,资料不多
- 高手进来看看,猜出来的算法
如果我自己来锁定IStream资源,如何操作?
如果我创建的两个线程同时对IStream所指定的同一块数据进行操作的话,如何确保数据的准确性,不也要等写完了再由其他线程读取吗?是这样的,我做一个小程序,想用复合文件存储一些临时数据,这些临时数据是每隔一段时间要做一次更新的,其余时间都是其他线程进行访问,只读不写的。如何在我第一个线程进行写的时候其他线程等候,也就是想把我线程1正在写的这块数据把它Lock起来,类似于CriticalSection 把独占,在线程使用完了我再释放,让其他线程使用。
dwMode=STGM_TRANSACTED | 0x00400000L | STGM_READWRITE | STGM_SHARE_DENY_WRITE;
创建文件是成功的,但是创建IStorage就会失败,为什么?(在这里0x00400000L 是STGM_DIRECT_SWMR)
DWORD dwMode=NULL;
// dwMode=STGM_READWRITE | STGM_SHARE_EXCLUSIVE; // (1)第1种方式
dwMode=STGM_TRANSACTED | 0x00400000L | STGM_READWRITE | STGM_SHARE_DENY_WRITE;// (2)第2种方式
CString sFile=_T("C:\\test.stg"), sStgSec=_T("TEST_STG");
IStorage* pStorageFile=NULL;
IStorage* pStg=NULL;hr = ::StgCreateDocfile(T2COLE(sFile), dwMode|STGM_CREATE,
0, &pStorageFile); // (1),(2)都成功
pStorageFile->CreateStorage(T2COLE((LPCTSTR)sStgSec),
dwMode|STGM_CREATE,
0,0,&pStg); // (1)成功,(2)失败
ASSERT(pStg);不解!!!!
知道的说一下,到底是那个地方出错了。
我想实现一个线程可以写,其他线程为只读。
信他你就死了。
IStream是个COM接口,跟映射文件有什么关系?即使某个对象是用映射文件来实现的,不保证所有对象都是这样,或者某个IStream对象是用来操作网络呢。
就会失败呢?