C++ QTMovie/QTMovieView与自定义C+之间的冲突+;框架

C++ QTMovie/QTMovieView与自定义C+之间的冲突+;框架,c++,objective-c,macos,cocoa,quicktime,C++,Objective C,Macos,Cocoa,Quicktime,我遇到了一个疯狂的问题 一个简单的可可> /强>应用程序,其中包含一个特定的电影文件或一个加载和渲染 qtMedis>强>的应用程序,它是很好的,但是如果我只链接我的习惯>强>目标C++框架< /强>,应用程序总是在第一次调用[QTMovie play]或[QTMovie autoplay]后立即独立挂起/死锁 我的自定义框架相当复杂,但我甚至无法想象它如何与qtmoine冲突,因为只执行静态初始化逻辑,框架与容器Cocoa应用程序配合得非常好,没有异常或信号,即使是valgrind也无法检测到

我遇到了一个疯狂的问题

一个简单的<强>可可> /强>应用程序,其中包含一个特定的电影文件或一个加载和渲染<强> qtMedis>强>的应用程序,它是很好的,但是如果我只链接我的习惯>强>目标C++框架< /强>,应用程序总是在第一次调用[QTMovie play][QTMovie autoplay]后立即独立挂起/死锁

我的自定义框架相当复杂,但我甚至无法想象它如何与qtmoine冲突,因为只执行静态初始化逻辑,框架与容器Cocoa应用程序配合得非常好,没有异常或信号,即使是valgrind也无法检测到任何东西。然而,操作符new重载,但是禁用它并没有帮助。。。另外,从哪个线程访问QTMovie也无关紧要-结果总是一样的

更改编译器设置、将编译器设置与框架设置同步都无效,编译器设置本身似乎不会导致任何问题

另外,如果我初始化QTMovieQTMovieView,动态加载我的框架并调用[QTMovie play][QTMovie autoplay]方法,调用它的线程也将死锁


有人能帮我理解一下,是什么可能导致这个问题

Ryan,是什么让你认为QTMovie和QTMovieView之间存在冲突?您是否尝试排除QTMovieView,QTMovie在没有它的情况下是否正常播放?你至少应该能听到声音。如果QTmovier是问题所在(我对此表示怀疑),那么您可以使用QTMovieLayer


另外,你说你使用了线程,QTMovie是一个反复无常的东西,你总是需要在主线程中创建它。如果要在另一个线程中使用它,请确保已成功将其分离并连接到新线程。在新线程中,您需要调用
[qtmoine enterQTKitOnThread]
[qtmoine enterqtkitonthreaddisablengreadsafetyprotection]
,然后才能开始对电影执行任何操作。此外,在电影已从线程中分离并且线程即将完成后,应调用[QTMovie ExitTQTKitonThread]。仅根据您的描述,很难理解正在进行的调用的确切顺序。然而,当我看到与您过去所做工作的一般描述相匹配的冻结时,它们通常是静态初始化问题。您提到只执行静态初始化逻辑,这对我来说更可能

问题是不能保证以任何顺序初始化文件范围静态。因此,有时您可能会根据所链接的库在初始化顺序上产生差异

因此,如果您有两个对象A和B,并且B依赖于A,您可能会发现,大多数情况下,A的初始值设定项都是先调用的,并且一切都正常,但随后您链接到一个新库中,突然间,B被排在了第一位。由于它使用未初始化的A,任何事情都可能发生,从访问无效/未映射的内存地址到返回if/else情况下用于奇怪程序流或奇怪容器查找的奇数值,等等


有一些方法可以消除此类静态初始化问题。请参阅。

我仅将QTMovieView作为屏幕进行交易。 对于一些简单的应用程序,我也使用它来处理以下所有事情:

[myQTMovieView setMovie:((QTMovie*)[QTMovie movieWithFile:文件错误:&错误]

[[myQTMovieView电影]停止]

[[myQTMovieView电影]自动播放]


因此,通过这种方式,您将永远不会初始化QTMovie。

您能否跟踪您的应用程序并确定哪个函数(及其调用方)处于挂起状态?它可能是[QTMovie play]、[QTMovie autoplay]或[myQTMovieInstance quickTimeMovie](取决于正在使用的内容)…如果不推荐使用,Mac OS X 10.6的替代方案是什么?我相信是QTMovieView。如果你能找到一些线索(你和我们)可能会有所帮助。否则,就没有太多的工作要做了。实际上它已经使用了静态链接…Davyd,谢谢你的回答,但是你误解了我-我的问题是将QTMovieView或QTMovie与我的自定义框架混合在一起。。。真正的问题是静态链接的复杂定制目标C++框架中的静态初始化可能会干扰QToMVIEVIEW或QTMITENT……注意:这也可以以不太透明的方式发生。您可以使用对某些数据使用静态初始化的库。当我看的时候,我也看到了大量的静力学。我同意这是最有可能的原因。在C++静态初始化器中看到了很多次。此外,“QtMyVIEDIdNoDebug”甚至在QToMVIEVIEW中也有作用,我想我真的应该以我的方式工作,因为我很难理解…九龙,当我从QTMovieView实例调用play()或autoplay()时,我有相同的效果。。。