我有一个数据转储文件,里面有不同的时间戳数据,我从时间戳中获得了时间,并让我的c线程在那个时间休眠。但问题是,实际的时差是10秒,而我在接收端接收的数据几乎有14,15秒的延迟。我使用的是window操作系统。请指点一下。
很抱歉我这一周的英语。
发布于 2010-05-28 16:16:20
如果我理解得好的话:
如果上面描述了你正在做的事情,那么你的设计有几个缺陷:
如果您提供更多详细信息,将更容易诊断出问题的根源。你认为的sleep (它确实是一个很差的计时器)或者你系统的其他部分。
如果您的转储很大,我打赌额外的时间来自读取数据并通过网络发送数据。你应该测量发送过程中消耗的时间(发送前和发送完成后的读取时间)。
如果这确实是额外时间的来源,您只需从下一次等待时间中删除该时间。
示例:发送前一个数据块花费了4s,下一个块是10s后,但由于您已经消耗了4s,所以您只需等待6s。
sleep仍然是一个非常不精确的计时器,显然,如果发送时间大于两次发送之间的延迟,上述机制将不起作用,但你已经明白了。
纠正睡眠在windows环境中并不像在unixes中那么糟糕。windows睡眠的准确度是毫秒,unix睡眠的准确度是第二。如果你不需要高精度的计时(如果涉及到网络,高精度的计时无论如何都是遥不可及的),睡眠应该是可以的。
发布于 2010-05-28 16:01:31
休眠功能将至少在您指定的时间内休眠,但不能保证它不会休眠longer.If您需要一个准确的间隔,您将需要使用一些其他机制。
发布于 2010-05-28 16:04:01
任何现代的多任务操作系统的调度程序都不能保证任何用户应用程序的精确计时。你可以尝试以某种方式为你的应用程序分配‘实时’优先级,比如从windows任务管理器。看看有没有帮助。
另一种解决方案是实现“受控”睡眠,即一系列500ms的睡眠,检查它们之间的当前时间戳。所以,如果你的睡眠时间是1秒而不是500毫秒,你会注意到这一点,并且不会做额外的睡眠(500毫秒)。
https://stackoverflow.com/questions/2927448
复制相似问题