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



大家下午好!我正在写一个程序来打印一个按字母顺序排列的蛇当我使用sleep()函数时它来自于<unist。h>库来延迟蛇的运动,但这个函数对我来说只有在等待时间是整数时才有效,否则如果它是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;

}

POSIXsleep函数是一种不可移植的整数秒睡眠方式。

c++从c++ 11开始提供了std::this_thread::sleep_for,它旨在提供更细粒度的睡眠持续时间。

这是mac问题吗?

是的,但这也是每个抢占式、多任务操作系统的问题。Sleep会放弃你的线程,你会要求操作系统线程调度器在一段时间后把控制权交还给你。有许多其他线程试图在你的CPU上运行,在普通的家用PC上成千上万,所以你很幸运能在几毫秒内重新获得控制权。例如,Windows XP甚至不能保证15ms,尽管更新的基于nt的Windows系统可以在适当的操作系统范围设置下保证0.5毫秒到1.5毫秒之间。

这就是为什么你从一开始就不会看到睡眠被使用。这是一种懒惰、低效和不精确的做法,这是任何游戏设计师都无法承受的。如果您想等待0.1ms,您可以编写一个while循环,并通过查看系统时钟保持循环,直到该停止为止。最好同时处理OS消息。

最新更新