我有一个图表,需要很长时间来创建和准备(5-10秒)。为了避免冰冻,我决定用线程创建我的图形,但是发生了一些奇怪的事情。在调试过程中运行图形之后;当我在线程中时,我可以在窗口中看到视频。但是当线程结束时,视频就消失了。我在全球范围内定义了关于我的图表的一切。在单独的线程中创建一个图形有什么问题?
谢谢
发布于 2014-03-11 07:43:40
在侧线程中创建图形是可能的,这是一个可行的方案。然而,仅凭这一信息还不足以可靠地解释症状。由于你有视频,你应该有视频渲染过滤器,尤指。以窗口模式运行。如果它在这个后台线程上创建了一个窗口,那么该窗口期望线程是活动的,甚至更多的是,您将在这个线程上传递窗口消息。这意味着,您不能在运行图形之后立即退出。
由于windows (可能包括过滤器可能为自己的需要创建的内部窗口),因此在STA线程上创建筛选图更安全。这可以是一个侧STA线程,你在上面创建图形,你保持它的活力,直到你破坏图形,你运行一个消息循环,在此期间。注意,有一个版本的Fitler图形管理器适合于此场景:
CLSID_FilterGraphNoThread在应用程序的线程上创建Filter。如果使用此CLSID,则调用CoCreateInstance的线程必须有一个消息循环来分发消息;否则,可能会出现死锁。此外,在应用程序线程退出之前,它必须释放和所有图形对象(例如过滤器、引脚、引用时钟等)。
https://stackoverflow.com/questions/22318769
复制相似问题