当前位置: 首页 > 面试题库 >

在C到毫秒之间是否有替代的睡眠功能?

司寇光华
2023-03-14
问题内容

我有一些在Windows上编译的源代码。我将其转换为可在Red Hat Linux上运行。

源代码包括<windows.h>头文件,并且程序员已使用该Sleep()函数等待毫秒的时间。这在Linux上不起作用。

但是,我可以使用该sleep(seconds)函数,但是它使用整数(以秒为单位)。我不想将毫秒转换为秒。我可以在Linux上的gcc编译中使用其他睡眠功能吗?


问题答案:

是-
定义了较早的POSIX标准usleep(),因此在Linux上可用:

   int usleep(useconds_t usec);

描述

usleep()函数将调用线程的执行挂起(至少)usec微秒。任何系统活动,处理呼叫所花费的时间或系统计时器的粒度都可能会稍微延长睡眠时间。

usleep()需要 微秒 ,因此您必须将输入乘以1000才能hibernate。

usleep()此后已弃用,随后从POSIX中删除;对于新代码,nanosleep()首选:

   #include <time.h>

   int nanosleep(const struct timespec *req, struct timespec *rem);

描述

nanosleep()暂停调用线程的执行,直到至少*req经过指定的时间,或者传递触发调用调用线程中的处理程序或终止进程的信号为止。

结构timespec用于以纳秒精度指定时间间隔。定义如下:

       struct timespec {
           time_t tv_sec;        /* seconds */
           long   tv_nsec;       /* nanoseconds */
       };

msleep()使用实施的示例函数nanosleep(),如果被信号中断则继续睡眠:

#include <time.h>
#include <errno.h>

int msleep(long msec)
{
    struct timespec ts;
    int res;

    if (msec < 0)
    {
        errno = EINVAL;
        return -1;
    }

    ts.tv_sec = msec / 1000;
    ts.tv_nsec = (msec % 1000) * 1000000;

    do {
        res = nanosleep(&ts, &ts);
    } while (res && errno == EINTR);

    return res;
}


 类似资料:
  • 我正在尝试使用Java开发2D游戏。到目前为止,我已经设法将游戏设置为使用全屏独占模式,并在自定义线程中进行活动渲染。我决定使用的游戏循环是固定时间步长变量渲染类型。这种类型的游戏循环应该尽可能快地渲染设备可以处理,我对此并不完全满意。所以我试图使用来限制帧速率。 如果我关闭所有渲染,并简单地在游戏循环中更新游戏,< code>Thread.sleep(1)大约在< code>1 ms内成功Hib

  • sleep(500)将挂起当前线程至少500毫秒,我知道它可能会比500多一点,但绝不会少于这个时间。现在,1毫秒=1000000纳秒,我想暂停当前线程500毫秒,即=500*1000000纳秒,但当我运行以下代码时,它有时睡眠时间少于指定的纳秒值。这是为什么呢?以及如何至少睡500*1000000纳秒。 有时输出是

  • 我是测试自动化的新手,尤其是Selenium。我正在使用Selenium网络驱动程序Eclipse。我遇到的最大问题之一是我们的脚本由于互联网速度或服务器性能而崩溃。我目前使用来解决这个问题。然而,这并不是秘密,强制等待时间直到计时器完成。我试图为下面的脚本找到一个优化的解决方案。在浏览了Stackoverflow上的帖子后,我找到了下面的)循环中提供的解决方案。有人建议使用: 以确保操作(单击按

  • 问题内容: 我知道POSIX 函数会使程序hibernatex秒。在C ++中是否有使程序hibernatex 毫秒 的功能? 问题答案: 请注意,毫秒级没有标准的C API,因此(在Unix上)您必须满足,它接受微秒:

  • 我正在调用while循环内的线程Hibernate1秒。当标志为true时,循环将运行(标志为true无限时间)。在循环内,线程应Hibernate1秒,唤醒并增加计数器,检查IF条件,如果为FALSE,则应再次Hibernate1秒并继续29次。在第30次迭代中,IF条件为true,IF语句中调用的方法将收集并存储数据。最后,在第32次迭代中,第二个IF语句将把存储的数据发送到服务器,并将计数设

  • 问题内容: 关于PHP中的函数,我有两个问题: 睡眠时间是否会影响我的PHP脚本的最大执行时间限制?有时,PHP显示消息“超过30秒的最大执行时间”。如果我使用此消息会出现吗? 使用该功能有没有风险?它会消耗很多CPU性能吗? 问题答案: 您应该尝试一下,只需让脚本hibernate超过您的最大执行时间即可。 Spoiler:在Linux下,睡眠时间被忽略,但是在Windows下,它计为执行时间。