gpt4 book ai didi

c++ - 在准确的时间运行代码,la crond/atd

转载 作者:太空宇宙 更新时间:2023-11-04 07:37:11 25 4
gpt4 key购买 nike

假设我正在实现一个时钟,并且我想最小化每单位时间的唤醒次数。所以,我只想在整分钟被叫醒(当我需要更新显示时)。在 C(或 C++)中执行此操作(最好是可移植的)的最佳方法是什么?

最佳答案

C++03 和 C07 标准并没有真正提供任何可移植的方法来执行此操作。如果您不能依赖较新的编译器,那么几乎唯一合理的可移植选择可能是 POSIX 线程(下文会详细介绍)。

在 C++11 下,您可以创建一个线程,并使用 std::sleep_until,或者(如果您愿意,出于某种原因)std::sleep_for .更喜欢后者的一个原因是对 C 的可移植性。C1x 有一个 thrd_sleep 函数,它本质上类似于 std::sleep_for,所以它可能更容易使用两者功能相同。

可移植性(在这种情况下)可能很难定义。这些函数在 C++ 标准和 C 草案中,但它们显然都是非常新的,因此很难猜测您关心的编译器是否实际实现了它们。同时,它们非常紧密地基于 pthreads,因此与大多数新的和不同的相比,它们已经(或即将)实现的可能性更大。

如果您愿意将自己限制在 C++ 中,您还可以考虑 Boost.thread .它与标准中的内容非常相似,但它已经适用于几乎所有主要编译器和平台。

如上所述,另一种可能性是直接使用 POSIX 线程。从理论上讲,它可能不那么便携(至少从长远来看),但实际上它现在可能至少是便携的——特别是,它可能可以移植到你真正关心的所有平台上,这是大多数真正重要的事情。显然,它们在基本上所有类 Unix 平台上都可用,而且还有一个 port to Win32。 .

我可能应该添加一个警告,我认为这是一个很小的警告:这些都不能真正保证在“准确时间”运行。它们几乎可以保证您的线程至少会按照您指定的时间休眠,但也可以更长——atcron 也是如此。大多数典型的操作系统都不是“实时”的,因此基本上任何在准确时间运行的尝试都是没有希望的,除非您非常松散地定义“准确”。大多数人主要感兴趣的是距离足够近,以至于它看起来和用户看起来是正确的,所以任何比十分之一秒左右更准确的东西都是不必要的。在那种情况下,您通常可以做得很好(尽管如果系统负载真的很重,即使这样也可能成为问题)。

关于c++ - 在准确的时间运行代码,la crond/atd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7837481/

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