Mah*_*ika 16 c++ linux ubuntu gcc boost
我在Ubuntu中使用C++和codeBlocks,在GCC 4.7中使用1.46 [yield_k.hpp]
我得到这个编译时错误:
error : Sleep was not declared in this scope
Run Code Online (Sandbox Code Playgroud)
码:
#include <iostream>
using namespace std;
int main() {
cout << "nitrate";
cout << flush;
sleep(1000);
cout << "firtilizers";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个错误?我希望程序挂起1秒钟.
mos*_*ear 24
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;
}
}
Run Code Online (Sandbox Code Playgroud)
您将需要<time.h>
和<errno.h>
以C++的形式提供as <ctime>
和<cerrno>
.
usleep
使用起来更简单(只需乘以1000,所以使其成为内联函数).但是,不可能保证睡眠会在给定的时间内发生,它已被弃用,您需要 - extern "C" { }
包括<unistd.h>
.
第三种选择是使用select
和struct timeval
,如http://source.winehq.org/git/wine.git/blob/HEAD:/dlls/ntdll/sync.c#l1204所示(这就是葡萄酒如何模仿Sleep
,它本身只是一个包装.SleepEx
)
注意:(sleep
小写's'),其声明在其中<unistd.h>
,不是可接受的替代品,因为它的粒度是秒,比Windows' Sleep
(大写's')更粗糙,其粒度为毫秒.
关于第二个错误,___XXXcall
是一个MSVC++ -特定的令牌(因为是__dllXXX
,__naked
,__inline
,等等).如果你真的需要stdcall,使用__attribute__((stdcall))
或者类似于在gcc中模拟它.
注意:除非您的编译目标是Windows二进制文件并且您使用的是Win32 API,否则使用或要求stdcall
是Bad Sign™.
Eri*_*ski 15
把它放在一个名为的文件中 s.cpp
#include <iostream>
#include <unistd.h>
using namespace std;
int main() {
cout << "nitrate";
cout << flush;
usleep(1000000);
cout << "firtilizers";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译并运行它:
el@defiant ~/foo4/40_usleep $ g++ -o s s.cpp
el@defiant ~/foo4/40_usleep $ ./s
nitratefirtilizers
Run Code Online (Sandbox Code Playgroud)
它打印出"硝酸盐",等待1秒,然后打印出'firtilizers'
归档时间: |
|
查看次数: |
87098 次 |
最近记录: |