gpt4 book ai didi

C++ 错误 : Sleep was not declared in this scope

转载 作者:IT老高 更新时间:2023-10-28 22:23:39 24 4
gpt4 key购买 nike

我在 Ubuntu 中使用带有 codeBlocks 的 C++,在 GCC 4.7 中 boost 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 秒。

最佳答案

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,因此将其设为内联函数)。但是,无法保证 sleep 会在给定的时间内发生,它已被弃用,您需要 extern "C" { } -包括<unistd.h> .

第三种选择是使用 selectstruct timeval ,见 http://source.winehq.org/git/wine.git/blob/HEAD:/dlls/ntdll/sync.c#l1204 (这就是 wine 模拟 Sleep 的方式,它本身只是 SleepEx 的包装器)。

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

关于您的第二个错误,___XXXcall是特定于 MSVC++ 的 token (如 __dllXXX__naked__inline 等)。如果您真的需要 stdcall,请使用 __attribute__((stdcall))或类似的在 gcc 中模拟它。

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

关于C++ 错误 : Sleep was not declared in this scope,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10976176/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com