多线程中使用Com
来源:互联网 发布:知乎的野心与终局 编辑:程序博客网 时间:2024/05/14 07:49
最近做一个类似动画编辑的工具,由于要有类似flash的播放功能,做的时候首先想到的是用windows的SetTimer定时器,也采用了这种方法,但后来测试发现播放不能实时.经过调试发现是SetTimer的精度不够,查了一些资料,就把SetTimer换成了多媒体的定时器timeSetEvent.播放是没问题了,可是声音又没了.声音播放用的是Direct show,声音播放部分专门做成了一个DLL,而且只在主线程中Load了这个DLL.问题出在哪里呢?之前用SetTimer怎么就没问题?换成timeSetEvent就出问题了?
我们先看一下timeSetEvent这人API:MMRESULT timeSetEvent(UINT uDelay, UINT uResolution, LPTIMECALLBACK lpTimeProc, DWORD dwUser, UINT fuEvent);看到第三个参数,这是个回调函数,每次有事件的时候都会调用这个函数,问题就出在这个回函数中,timeSetEvent每次有事件时都会开辟一个线程,而这个回调函数就是线程函数,在主线程Load播放声音的DLL时,就会调用CoInitialize(NULL),但播放的动作是在上面的回调函数中,也就是另一个线程中,结果就出问题了.我们知道,在多线程中使用Com时,应在每个线程中都对Com进行初使化,这样才能保证不会出错.
问题解决:在每个事件到来的时候都对Com进行实例化,CoInitializeEx(NULL, COINIT_MULTITHREADED),当然退出时应对应的调用CoUninitialize().
- 多线程中使用Com
- COM连接点在多线程中使用的注意事项
- 多线程中使用COM组件时的初始化问题
- COM中使用数组
- com中使用typedef
- wpf中使用Com
- 多线程调用COM组件,使用CoInitializeEx()
- c#中多线程---使用多线程
- Com多线程
- COM---多线程
- 在COM中使用数组
- vc6中使用com组件
- Com中BSTR的使用
- Com中BSTR的使用
- Com中BSTR的使用
- VC++6.0中使用COM
- GTK中使用多线程
- c#中使用多线程
- C# GDI+ 窗体绘图刷新重绘问题 GDI+绘图问题
- jquery之清除ajax缓存
- 如何让VC IDE识别自定义C++关键字
- 浅谈SQL游标
- 过度工程
- 多线程中使用Com
- 配置apache-tomcat-6.0.29出现的问题
- 开始学习了
- 一个简单的awk脚本
- oracle视频教程集合
- .NET设计规范(八) C#编程风格约定(完)
- incompatible implicit declaration of built-in function解决办法
- C++迭代器 iterator
- GAE 博客——B3log Solo 0.2.6 正式版发布了!