最近写一个morse码练习软件,使用Qt开发,用到了QSoundEffect。
因为Qt跨平台的特性,把Linux下的源代码直接放到Windows下编译可以直接通过,但运行起来却有问题。在Linux下节奏正常的播放,在Windows下节奏明显变慢。找不出问题,只好用个笨办法,在代码开始运行时启动一个QElapsedTimer,每行代码执行完毕qDebug输出一下消耗时长。把Linux和Windows平台输出的调试信息对比发现,QSoundEffect的stop,Linux平台上耗时0,Windows平台上耗时大约200多毫秒。这个时长在大多环境下不是问题,在morse码播放无法接受,一个滴声的长度一般也就在80毫秒左右。
最后用线程解决了这个问题。把播放任务放到线程里,主线程正常计时,调用线程播放滴嗒声,stop动作放在线程里,对主线程的计时没有影响。
然后的问题是200毫秒还是太长了,两个连续的滴声经常无法正常工作。于是用多个滴声线程,播放之前检查一下,谁闲着就用谁。
基本可以正常使用。
标签:Qt,Windows,线程,Linux,QSoundEffect,播放 From: https://www.cnblogs.com/sundp/p/17071259.html