除了睡觉之外,我有一个关于延迟 C++ 程序的替代方法的问题。
我的程序有一部分接收 UDP 数据包并将其发送到控制器。这部分程序必须异步运行。为了减少此提供程序的开销,我决定使用异步 IO 来接收 UDP 数据包,而不是让单独的线程监视套接字。
我按照这个sigaction 的例子来完成这个。我注意到,如果我在这个 sigaction 处于活动状态时尝试使用 usleep,它会在我收到数据包时打破我的睡眠。这是有道理的,因为我假设 sigaction 是由 CPU 上的某种中断触发的,这可能会阻止 CPU 休眠。如果有人对为什么会发生这种情况有很好的解释,我会很想知道。我的问题是有时我必须连续发送几个数据包并且需要确保延迟它们,否则它们会被我的控制器错过。
我通常会使用睡眠来延迟数据包的发送,但现在我不能,因为它被我的 sigaction 破坏了。我曾考虑过使用繁忙的等待,但它可能太不一致了。我也有可能使用一个使用计时器定期清空的数据包队列,但似乎可能有一个更简单的解决方案。
除了睡眠之外,还有其他方法可以延迟数据包的发送吗?有没有办法设置我的异步 IO 使其不会中断睡眠?我会以错误的方式解决这个问题吗?