使用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 【问题描述】:下午好,
我正在编写一个程序来打印一条按字母顺序排列的蛇,当我使用
#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++11 在 Mac 上创建 async::thread?