为什么_sleep(1000)不会在Xcode中编译?

时间:2015-02-28 22:57:18

标签: c++ windows sleep

我有一个应该从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';
    }
}

2 个答案:

答案 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';                                                           
    }                                                                           
}