C++ C语言中的睡眠函数错误

C++ C语言中的睡眠函数错误,c++,c,windows,C++,C,Windows,我有一个数据转储文件,在不同的时间戳数据可用的情况下,我从时间戳中获取时间,并休眠我的c线程。但问题是,实际的时差是10秒,而我在接收端接收到的数据几乎是14,15秒的延迟。我正在使用Windows操作系统。请引导我 对不起,我的英语周 睡眠功能的睡眠时间至少与您指定的时间一样长,但不能保证睡眠时间不会更长。如果您需要准确的时间间隔,则需要使用其他机制。任何现代多任务操作系统的调度程序都不能保证对任何用户应用程序的精确计时。 您可以尝试以某种方式为应用程序分配“实时”优先级,例如从windows

我有一个数据转储文件,在不同的时间戳数据可用的情况下,我从时间戳中获取时间,并休眠我的c线程。但问题是,实际的时差是10秒,而我在接收端接收到的数据几乎是14,15秒的延迟。我正在使用Windows操作系统。请引导我


对不起,我的英语周

睡眠功能的睡眠时间至少与您指定的时间一样长,但不能保证睡眠时间不会更长。如果您需要准确的时间间隔,则需要使用其他机制。

任何现代多任务操作系统的调度程序都不能保证对任何用户应用程序的精确计时。 您可以尝试以某种方式为应用程序分配“实时”优先级,例如从windows任务管理器。看看是否有帮助

另一个解决方案是实施“受控”睡眠,即睡眠一系列500ms,检查它们之间的当前时间戳。因此,如果你的所有人在某一步都会睡1秒而不是500毫秒,你会注意到这一点,而不会再多睡500毫秒。它的准确度与Windows系统上的差不多。关于他们有一个很好的代码项目。

如果我理解得很好:

  • 您有一个发送数据的线程(通过网络?数据的来源是什么?)
  • 您可以使用sleep减慢rythm的发送速度
  • 接收到的数据(在网络的另一端)可以延迟更多(15秒而不是10秒)
如果上面描述了您正在做的事情,那么您的设计有几个缺陷:

  • 睡眠是非常不精确的,它会等待至少n秒,但可能会更久(特别是当你的系统被其他正在运行的应用程序加载时)
  • 网络引入了缓冲延迟,您无法保证数据会立即通过网络发送(通常不是这样)
  • trip本身会引入一些延迟(延迟),如果您的协议等待来自接收端的ACK,您应该考虑到这一点
  • <> LI>还应该考虑读取/构建/检索数据所需的时间,并通过网络发送。取决于你在做什么,它可以忽略不计或需要几秒钟
如果您提供更多详细信息,将更容易诊断问题的根源<代码>睡眠正如您所相信的(它确实是一个非常糟糕的计时器)或系统的其他部分

如果您的转储很大,我敢打赌额外的时间来自读取数据和通过网络发送数据。您应该测量发送过程中消耗的时间(完成发送之前和之后的读取时间)

如果这确实是额外时间的来源,您只需将该时间从下一次等待中移除即可

示例:发送上一个数据块需要4秒,下一个数据块需要10秒,但由于您已准备好使用4秒,您只需等待6秒

sleep
仍然是一个非常不精确的计时器,显然,如果发送时间大于发送之间的延迟,上述机制将无法工作,但您明白了


校正睡眠在windows环境中不如在Unix中那么糟糕。windows睡眠的精度为毫秒,unix睡眠的精度为秒。如果您不需要高精度定时(并且如果涉及网络,高精度定时无论如何都无法实现),则睡眠应该是正常的。

睡眠功能可能需要比请求的时间更长,但决不能少于请求的时间。使用winapi定时器函数在从现在起的一段时间内调用一个函数


您也可以使用windows任务计划程序,但这超出了编程独立选项的范围。

不理解您的问题。。。“那时候睡我的c线程”??为什么?如果你认为你无法有效地沟通你的问题,发布你正在使用的代码。这可以帮助其他人理解你的问题。我有一系列时间戳数据,我必须保持这个顺序,以便我想睡眠我的线程。请给我一些关于Windows操作系统上精确睡眠的指导。并且鉴于@Arman正在使用Windows,很难在精确的时间间隔内睡眠,因为Windows不是实时操作系统。数据源是我的转储txt文件。