首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从DirectShow过滤器FillBuffer()调用中调用PeekMessage/GetMessage是否安全?

从DirectShow过滤器FillBuffer()调用中调用PeekMessage/GetMessage是否安全?
EN

Stack Overflow用户
提问于 2011-12-26 06:17:03
回答 1查看 413关注 0票数 0

我有一个使用DSPACK组件库用Delphi6编写的DirectShow过滤器。这是一个推送源视频过滤器,它从我编写的外部协作进程中接收其源帧。

当创建并运行调用过滤器的FillBuffer()调用的工作线程时,当图形启动时,我从该工作线程做的第一件事是使用AllocateHWND()创建一个隐藏窗口,以处理包含外部生成的框架的WM_COPYDATA消息。就在线程销毁之前,我销毁了隐藏的窗口。换句话说,隐藏窗口是在调用FillBuffer()的工作线程的执行上下文中创建和销毁的。我的目的是让FillBuffer()在等待WM_COPYDATA或WM_QUIT消息时阻塞。外部协作进程将使用WM_COPYDATA消息和隐藏窗口的WndProcc()句柄将帧提交给我的过滤器。我将在引脚的Inactive()方法的重写中发布一条WM_QUIT消息(感谢提示@RomanR),以便在关闭过滤器之前取消阻止FillBuffer()调用。

我的问题是,在这种情况下,从FillBuffer()调用中调用PeekMessage()或GetMessage()是否安全?或者,在DirectShow图形执行的上下文中,是否存在可能因此而产生的潜在陷阱?另外,你是否看到我的整体方法中有任何我需要考虑的缺陷?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-26 06:43:08

安全,但也不是那么合理。正在后台工作线程上调用FillBuffer,该线程上通常没有窗口。它可能只是您要为其实现消息循环的窗口。并且这里的窗口仅用于接收WM_COPYDATA消息。这听起来似乎是可行的,但如果没有助手窗口,通过命名文件映射和事件在应用程序之间传递数据,可能会更容易。如果是视频(你有音频,对吧?)您还可以享受较小的性能开销。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8631855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档