gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 14:21:16 26 4
gpt4 key购买 nike

我遇到了一个疯狂的问题......

一个带有QTMovieView的简单Cocoa应用程序,其中设置了一个特定的电影文件或一个手动加载和渲染QTMovie的应用程序工作正常,但是,如果我只是链接我的自定义 Objective C++ 框架,应用程序总是在第一次[QTMovie 播放][QTMovie 自动播放] 呼唤...

我的自定义框架非常复杂,但我什至无法想象它怎么会与 QTMovie 发生冲突,因为只执行静态初始化逻辑,该框架与其容器完美配合 < strong>Cocoa 应用程序,没有异常或信号,甚至 valgrind 也无法检测到任何东西。然而,operator new 重载,但禁用它并没有帮助......而且从哪个线程访问 QTMovie 也无关紧要 - the结果总是一样的...

更改编译器设置,将编译器设置与框架设置同步都没有效果,编译器设置本身似乎不会引起任何问题。

此外,如果我初始化QTMovieQTMovieView,动态加载我的框架并调用[QTMovie 播放][QTMovie autoplay] 方法,调用它的线程也会死锁...

有人可以帮助我理解,什么可能导致这个问题?!

最佳答案

仅根据您的描述,很难理解正在进行的调用的确切顺序。但是,当我看到与您过去所做的一般描述相符的卡住时,它们通常是静态初始化问题。您提到您只执行了静态初始化逻辑,这对我来说更有可能。

问题是文件作用域的静态变量不能保证以任何顺序初始化。那么,会发生什么情况,有时您会根据链接到的库在初始化顺序上有所不同。

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

有一些方法可以消除这些类型的静态初始化问题。参见 this article on solving the static initialisation fiasco .

关于c++ - QTMovie/QTMovieView 与自定义 C++ 框架之间的冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7530121/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com