C ++错误:睡眠没有在此范围内声明

我在Ubuntu中使用C ++代码块,在GCC 4.7中增加1.46 [yield_k.hpp]

我得到这个编译时间错误:

error : Sleep was not declared in this scope 

码:

 #include <iostream> using namespace std; int main() { cout << "nitrate"; cout << flush; sleep(1000); cout << "firtilizers"; return 0; } 

我该如何解决这个错误? 我想要程序挂起1秒钟。

Solutions Collecting From Web of "C ++错误:睡眠没有在此范围内声明"

Sleep是一个Windows功能。

对于Unix,请使用nanosleep (POSIX)或usleep (BSD;不建议使用)。

一个nanosleep例子:

 void my_sleep(unsigned msec) { struct timespec req, rem; int err; req.tv_sec = msec / 1000; req.tv_nsec = (msec % 1000) * 1000000; while ((req.tv_sec != 0) || (req.tv_nsec != 0)) { if (nanosleep(&req, &rem) == 0) break; err = errno; // Interrupted; continue if (err == EINTR) { req.tv_sec = rem.tv_sec; req.tv_nsec = rem.tv_nsec; } // Unhandleable error (EFAULT (bad pointer), EINVAL (bad timeval in tv_nsec), or ENOSYS (function not supported)) break; } } 

您需要<time.h><errno.h> ,在C ++中可用<ctime><cerrno>

usleep使用起来比较简单(只需乘以1000即可,因此使用内联函数)。 但是,不可能保证在一定的时间内睡眠会发生,因此不推荐使用,而需要extern "C" { } -include <unistd.h>

第三个选择是使用selectstruct timeval ,如http://source.winehq.org/git/wine.git/blob/HEAD:/dlls/ntdll/sync.c#l1204所&#x793A; (这是葡萄酒的模拟Sleep ,这本身只是Sleep包装)。

注意 :声明在<unistd.h> sleep (小写's') 不是一个可接受的替代品,因为它的粒度是秒,比Windows的Sleep (大写's')粗,毫秒。

关于你的第二个错误, ___XXXcall是一个MSVC ++特定的标记(就像__dllXXX__naked __dllXXX__naked等)。 如果你真的需要stdcall,使用__attribute__((stdcall))或类似的模拟gcc。

注意 :除非您的编译目标是Windows二进制文件, 并且您使用的是Win32 API,否则对stdcall使用或要求是A Bad Sign™。

如何在Linux上的C ++程序中使用usleep:

把它放在一个名为s.cpp的文件中

 #include <iostream> #include <unistd.h> using namespace std; int main() { cout << "nitrate"; cout << flush; usleep(1000000); cout << "firtilizers"; return 0; } 

编译并运行它:

 el@defiant ~/foo4/40_usleep $ g++ -os s.cpp el@defiant ~/foo4/40_usleep $ ./s nitratefirtilizers 

它打印“硝酸盐”,等待1秒钟,然后印上“firtilizers”

在我的情况下,它帮助编写S leep而不是leep – 很奇怪,但工作!

 #include <iostream> #include <unistd.h> using namespace std; int main() { const long a=1000000; long j; cin >> j; usleep(a*j); puts("exit"); } 

使用usleep()睡眠和不要忘记包括unistd.h (不cunistd