我有一个应该从10倒数到0的程序,每次倒计时它应该等待一秒钟,然后使用cin.flush()刷新输出。这位教授在课堂上证明了这一点并且工作得很好,但是,当我回到家时,Xcode给了我一个错误,说_sleep(1000)是使用未声明的标识符' _sleep' - 因为我导入了特殊命令并且它只应该在windows编译器中使用_sleep,所以不应该是这种情况。
简而言之,这需要在windows和mac编译器中进行编译,我应该通过这些编译器定义进行编译。但由于某些原因,Xcode一直试图告诉我这是错误的。
#ifdef GPP
#include <unistd.h>
#else
#include <cstdlib>
#endif
int main()
{
for (int timer = 10; timer >= 0; timer--)
{
cout << timer;
cout.flush();
//compiler functions
#ifdef GPP
Sleep(1); //One second to sleep on GPP compilers
#else
_sleep(1000);//On windows 1000ms sleep time
#endif
cout << '\r';
}
}
答案 0 :(得分:2)
睡眠和变体不可移植,它们是特定于操作系统的。 这就是我们使用标准的原因:
std::this_thread::sleep_for (std::chrono::milliseconds(your time here));
答案 1 :(得分:0)
您是否在任何地方定义了GPP?如果没有那么代码将使用_sleep(1000),这是特定于Windows的,并且不能在mac上工作。它应该工作,例如,如下编译:
g++ -DGPP
但是你还需要改变睡眠状态,因为没有睡眠功能。
#ifdef GPP
#include <unistd.h>
#else
#include <cstdlib>
#endif
#include <iostream>
using namespace std;
int main()
{
for (int timer = 10; timer >= 0; timer--)
{
cout << timer;
cout.flush();
//compiler functions
#ifdef GPP
sleep(1); //One second to sleep on GPP compilers
#else
_sleep(1000);//On windows 1000ms sleep time
#endif
cout << '\r';
}
}