我是否需要整理由CreateStreamOnHGlobal返回的IStream,以便在线程之间使用?

祖父

我有一个IStream用创建的COM流对象(CreateStreamOnHGlobal

我想在同一进程中的不同线程之间使用它。我是否需要封送流对象本身(使用CoMarshalInterfaceetc)?还是已经是线程安全的?

EDITED,读/写/搜索已与我的代码中的锁正确同步。

我检查

COM被视为IStream一种特殊的接口,可以在线程之间安全使用。这是必要的,以便可以在IStreamusing中跨线程边界封送其他接口CoMarshalInterThreadInterfaceInStream

可以在Dobb博士的2003年文章:封送COM接口中找到更多信息

更新:

最初发布的答案并不完全正确。由OLEIStream返回接口以及由OLECreateStreamOnHGlobal间接创建接口CoMarshalInterThreadInterfaceInStream可以在同一过程中跨线程安全地访问。

文档分散且难以获取。CoMarshalInterThreadInterfaceInStream陈述以下内容:

当在接收线程中运行的客户端尝试解组指针时,可以保证ppStm参数中返回的流的行为正确。

CreateStreamOnHGlobalSHCreateMemStream以下位置获得类似信息

CreateStreamOnHGlobal创建的流是线程安全的。

这些保证通常并不适用于所有IStream实现。为了安全起见CoMarshalInterThreadInterfaceInStream,即使并非绝对必要,也可以始终使用跨线程边界封送接口这是从来没有有害的这种方式来封送接口指针,因为COM是足够聪明,不元帅(或remarshal)的指针,如果封送处理是没有必要的请记住,虽然这是一次元帅-一次元帅如果要从多个线程解组接口,可以将接口放入“全局接口表”中

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在线程之间使用同步集合

来自分类Dev

我可以跨Realm在线程之间使用被忽略的属性吗?

来自分类Dev

在没有系统调用的线程之间使用std :: istream和std :: ostream(管道)

来自分类Dev

我可以在Realm的各个线程之间使用被忽略的属性吗?

来自分类Dev

C-线程之间使用的结构中的字段

来自分类Dev

flask会话变量是否在线程之间保持状态?

来自分类Dev

使用Android Realm在线程之间进行读写

来自分类Dev

使用pthread库在线程之间进行同步

来自分类Dev

使用管道在线程之间发送数据

来自分类Dev

如何使用管道在线程之间发送数组?

来自分类Dev

使用NSOperationQueue在线程之间移动变量

来自分类Dev

线程之间的更改通知标志是否需要内存屏障?

来自分类Dev

在线程之间传递对象

来自分类Dev

在线程之间移动向量

来自分类Dev

在线程之间共享mvar

来自分类Dev

在线程之间共享容器阵列

来自分类Dev

在线程之间共享变量的方法

来自分类Dev

C ++-在线程之间传递数据

来自分类Dev

在线程之间分配不均数

来自分类Dev

在线程之间传输函数调用

来自分类Dev

在线程之间发送盒装特征

来自分类Dev

pthreads在线程之间共享内存

来自分类Dev

在线程之间传递对象

来自分类Dev

在线程之间传递NSManagedObjectContext

来自分类Dev

工作共享机制(在OpenMP中)是否在线程正在执行时在线程之间传输任务?

来自分类Dev

如何使用TcpStream在2个线程之间使用异步拆分?

来自分类Dev

在多个线程之间使用Chunks迭代器时,值的寿命不足

来自分类Dev

Qt:在两个子线程之间使用信号和插槽

来自分类Dev

有什么办法可以在WPF中的两个STA线程之间使用对象?

Related 相关文章

热门标签

归档