使用c++在mac上使用sleep函数告诉程序等待0.1毫秒

Posted

技术标签:

【中文标题】使用c++在mac上使用sleep函数告诉程序等待0.1毫秒【英文标题】:Using the sleep function to tell the program to wait for 0.1 miliseconds on mac using C++ 【发布时间】:2021-06-08 16:43:17 【问题描述】:

下午好, 我正在编写一个程序来打印一条按字母顺序排列的蛇,当我使用 库中的 sleep() 函数来延迟蛇的移动时,但这个函数对我来说只有在等待时间为整数时才有效否则,如果它是 0.1 之类的东西,它就不会完全起作用。这是mac的问题吗? sleep函数只取整数吗?

#include <iostream>
#include <unistd.h>

using namespace std;

int main()

    int snake_speed = 1.5;
    int number = 0;
    string alphabet = "abcdefghijklmnopqrstuvwxyz";
    char alphabet_num = alphabet[number];


    while(1 == 1)
        cout << "_____" << alphabet_num << endl;
        sleep(snake_speed);
    number += 1;
    cout << "____" << alphabet_num << "_" << endl;
    sleep(snake_speed);
    number += 1;
    cout << "___" << alphabet_num << "__" << endl;
    sleep(snake_speed);
    number += 1;
    cout << "__" << alphabet_num << "___" << endl;
    sleep(snake_speed);
    number += 1;
    cout << "_" << alphabet_num << "____" << endl;
    sleep(snake_speed);
    number += 1;
    cout << alphabet_num << "_____" << endl;
    sleep(snake_speed);
    number += 1;
    cout << "_" << alphabet_num << "____" << endl;
    sleep(snake_speed);
    number += 1;
    cout << "__" << alphabet_num << "___" << endl;
    sleep(snake_speed);
    number += 1;
    cout << "___" << alphabet_num << "__" << endl;
    sleep(snake_speed);
    number += 1;
    cout << "____" << alphabet_num << "_" << endl;
    sleep(snake_speed);
    number += 1;
    cout << "_____" << alphabet_num << endl;
    sleep(snake_speed);
    number += 1;



return 0;

【问题讨论】:

man7.org/linux/man-pages/man3/sleep.3.htmlunsigned int sleep(unsigned int seconds); 感谢您帮助我实现了我想要的!托马斯·萨布里克 【参考方案1】:

这是 mac 问题吗?

是的,但这也是每个抢先式多任务操作系统的问题。睡眠会放弃您的线程,并且您要求操作系统线程调度程序在一段时间后将控制权交还给您。有许多其他线程试图在您的 CPU 上运行,在普通家用 PC 上成千上万,因此您很幸运能够在几毫秒内重新获得控制权。例如Windows XP can't even guarantee 15ms,尽管新的基于 NT 的 Windows 系统可以在适当的操作系统范围设置下保证半毫秒到 1.5 毫秒之间的任何时间。

这就是为什么你一开始就不会看到睡眠被使用的原因。它是懒惰、低效和不精确的,这是任何游戏设计师都无法承受的三件事。如果您想等待 0.1 毫秒,您可以编写一个 while 循环并继续循环,直到通过查看系统时钟来停止。最好同时处理操作系统消息。

【讨论】:

【参考方案2】:

POSIX sleep function 是一种非便携式休眠整数秒的方式。

自 C++11 起,C++ 提供std::this_thread::sleep_for,旨在提供更精细的睡眠持续时间。

【讨论】:

以上是关于使用c++在mac上使用sleep函数告诉程序等待0.1毫秒的主要内容,如果未能解决你的问题,请参考以下文章

如何让C语言sleep()函数等待时间小于1秒

如何在mac终端中运行c++程序

告诉 Ruby 程序等待一段时间

如何使用 C++11 在 Mac 上创建 async::thread?

如何在 Mac OS 上使用 Eclipse 生成 C++ 构造函数/复制构造函数

Sleep() 未定义,但它知道 _sleep() 存在并说要使用 Sleep() 代替? C++