作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前在使用 Poco 线程加载波形数据、生成波形和计算节拍位置时遇到问题。我的音频线程与 RTAudio 用于传输我的数据的线程不同,因此重要的是它的互斥量不要锁定太久,因为 RTAudio(需要锁定我的音频互斥量)不能等待太久,否则会发生缓冲区欠载。 ..目前正在发生。现在即使程序处于空闲状态也开始发生;没有被要求加载任何东西。
我的想法是计算线程被阻止获取互斥锁的时间以及它们被锁定的时间,以找出问题所在并将其打印到控制台,所以这将类似于每帧 6 个 printf,每秒 60 帧的目标帧率。
我刚刚注意到,如果我停止打印到控制台,程序空闲时不会发生缓冲区不足,看起来这是我在一个帧中多次使用 printf 变得更糟的问题。
我想知道这是怎么发生的,但更重要的是,如果我不能使用 printf,我该如何监控线程时间?
最佳答案
POSIX 要求大多数标准 I/O 函数是线程安全的和原子的。这意味着在同一流上运行的多个 *printf
将相互阻塞。如果您不想锁定,您应该检查操作系统特定的非阻塞功能的文档。
关于c++ - 调试线程时printf的作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37226471/
我是一名优秀的程序员,十分优秀!