gpt4 book ai didi

c - 使用 C 确保准确计时的最佳方法

转载 作者:太空狗 更新时间:2023-10-29 15:27:55 27 4
gpt4 key购买 nike

我是一名初级 C 程序员(虽然不是初级程序员)希望深入到一个项目中自学 C。我的项目是基于音乐的,因此我很好奇是否有任何“最佳实践” -se,当涉及到计时功能时。

澄清一下,我的项目基本上是尝试构建一些准系统音乐符号/作曲软件(记住,强调准系统)。我最初考虑使用 OSX 作为我的平台,但我想用 C 来做,而不是 Obj-C(虽然我知道这可能会更容易......CoreAudio 看起来像是一个非常强大的工具来处理这类事情)。因此,尽管我没有在 Obj-C 中构建 OSX 应用程序,但我可能最终会在 linux 系统(可能是 debian...)上构建它。

感谢大家的精彩回答。

最佳答案

计时函数有两种准确的方法:

  1. 单进程执行。
  2. 定时器事件处理程序/回调

单进程执行
大多数现代计算机同时执行多个程序。实际上,它们执行许多程序的一部分,根据优先级和其他指标将它们交换出来,看起来不止一个程序在同时执行。这种开销会影响程序中的时序。要么是程序读取时间延迟,要么是操作系统在设置自己的时间变量时延迟。

在这种情况下,解决方案是尽可能多地停止运行任务。获得最佳准确性的理想环境是让您的程序作为唯一程序运行。某些操作系统为 super 用户 应用程序提供 API 以阻止所有其他程序或杀死它们。

定时器事件处理/回调
由于不能信任操作系统能够高精度地执行您的程序,因此大多数操作系统将提供计时器 API。其中许多 API 都包含在计时器到期时调用您的函数之一的能力。这称为回调 函数。当计时器到期时,其他操作系统可能会发送消息或生成事件。这些属于计时器处理程序的类别。回调过程的开销比处理程序少,因此更准确。

音乐硬件

虽然您可以让您的程序将音乐发送到扬声器,但许多计算机现在都有单独的处理器来播放音乐。这释放了主处理器并提供了更多连续的音符,而不是由于程序的平台开销而导致声音被无声间隙分开,将下一个声音发送到扬声器。

优质的音乐处理器至少具有以下功能:

  1. 开始演奏
  2. 结束音乐通知

开始播放这是您告诉音乐处理器您的数据在哪里以及数据大小的功能。处理器将开始播放音乐。

结束音乐通知您为处理器提供一个指向函数的指针,该函数将在处理完音乐数据后调用。好的处理器会尽早调用该函数,因此在重新加载时声音不会有间隙。

所有这些都取决于平台,可能不是跨平台的标准。

希望这对您有所帮助。

关于c - 使用 C 确保准确计时的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2836988/

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