我正在寻求澄清以帮助我理解 Qt 4.8 中的 Qt 多线程和事件循环。我还要补充一点,我是一般线程的新手,所以这是我的问题的一部分。
我目前的情况是我有一个需要经常使用 QTMultiMedia-QAudioOutput 播放声音的 Qt 应用程序。我有两个课程,MainGui和AudioWorker。我希望经常调用 AudioWorker 来“播放()”声音。
显然 QAudioOutput 必须有一个事件循环,因此该过程不会在播放声音之前结束,如果这是在主类中完成的,它将阻止一切。所以我知道线程会有所帮助。
现在,如果我正确理解线程,生成的线程不能比创建它的函数寿命更长,除非它以某种方式分离?因此,如果我在 MainGui 类中收到播放声音的通知,并且我通过插槽连接生成了一个新线程,该线程在 AudioWorker 中调用 play(),一旦我的 MainGui 通知函数结束,带有事件循环的线程不会死吗?如果是这种情况,重点是什么,无论哪种方式 MainGui 都需要事件循环?
我肯定错过了什么吗?我是否需要以某种方式分离线程?我在 Qt 文档中没有看到太多关于分离的内容。仅仅播放一个简单的声音,整个过程似乎太过分了。
更新
通过在 play() 函数中创建 QThread 解决了问题。在我发出信号之前,线程不会过早退出。
在以下位置找到了一个隐藏但很好的示例:https ://nachtimwald.com/2015/05/02/effective-threading-using-qt/