如何为C ++程序添加定时延迟?

时间:2020-03-06 14:59:10  来源:igfitidea点击:

我试图在C ++程序中添加定时延迟,并且想知道是否有人对我可以尝试的内容或者可以查看的信息有任何建议?

我希望我有更多有关如何实现此定时延迟的详细信息,但是在我没有有关如何添加定时延迟的更多信息之前,我不确定我该如何尝试实现此延迟。

解决方案

我们想要简单的东西吗

sleep(3);

句法:

无效睡眠(无符号秒);

sleep()暂停执行一段时间(秒)。
通过调用sleep,当前程序将暂停执行,其执行时间为参数seconds指定的秒数。该间隔仅精确到最接近的百分之一秒或者操作系统时钟的精确度,以较低者为准。

如果需要微秒精度,也可以使用select(2)(这在没有usleep(3)的平台上有效)

以下代码将等待1.5秒:

#include <sys/select.h>
#include <sys/time.h>
#include <unistd.h>`

int main() {
    struct timeval t;
    t.tv_sec = 1;
    t.tv_usec = 500000;
    select(0, NULL, NULL, NULL, &t);
}

`

#include <unistd.h>
usleep(3000000);

这还将睡眠三秒钟。不过,我们可以进一步完善数字。

Win32:"睡眠(毫秒)"就是你所要的

Unix:usleep(microseconds)是我们想要的。

sleep()只需要几秒钟的时间,而这通常太长了。

请注意,这不能保证线程睡眠的时间将接近睡眠时间,而只能保证线程继续执行之前的时间至少为所需的时间。实际延迟将根据情况(尤其是所涉及的机器上的负载)而变化,并且可能比所需的睡眠时间高几个数量级。

另外,我们没有列出为什么需要睡觉,但通常应避免使用延迟作为同步方法。

是的,睡眠可能是此处选择的功能。请注意,传递给函数的时间是调用线程不活动的最短时间。因此,例如,如果我们以5秒钟的时间调用sleep,则可以确保线程将至少休眠5秒钟。可以是6,或者8或者50,具体取决于操作系统的功能。 (在最佳OS执行期间,这将非常接近5. )
睡眠功能的另一个有用功能是传入0。这将强制从线程中进行上下文切换。

一些其他信息:
http://www.opengroup.org/onlinepubs/000095399/functions/sleep.html

许多其他人为睡眠提供了很好的信息。我同意Wedge所说的睡眠很少是最合适的解决方案。

如果我们在等待某事时正在睡觉,那么最好还是等待那件事。查看条件变量。

我不知道我们要在哪个OS上执行此操作,但是对于线程和同步,我们可以查看Boost Threading库(Boost Condition Varriable)。

如果我们正试图等待异常短的时间,那么现在移到另一个极端,那么有几种hack样式选项。如果我们正在某种未实现"睡眠"的嵌入式平台上工作,则可以尝试使用一个空主体进行简单循环(for / while等)(请注意编译器不会对其进行优化)。当然,在这种情况下,等待时间取决于特定的硬件。
对于非常短暂的"等待",我们可以尝试装配" nop"。我非常怀疑这些是我们追求的,但是却不知道为什么需要等待,很难具体说明。

在Windows上,我们可以包括Windows库并使用" Sleep(0);"。休眠程序。它采用代表毫秒的值。