CodeBlocksを使用してUbuntuで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倍するだけなので、インライン関数にします)。ただし、一定時間スリープが発生することを保証することは不可能であり、非推奨であり、_extern "C" { }
_- include _<unistd.h>
_が必要です。
3番目の選択肢は、 http://source.winehq.org/git/wine.git/blob/HEAD:/dlls/ntdll/sync.c#で見られるように、select
および_struct timeval
_を使用することです。 l1204 (これはwineがSleep
をエミュレートする方法であり、それ自体はSleepEx
の単なるラッパーです)。
注:sleep
(小文字の 's')、その宣言は_<unistd.h>
_であり、notは受け入れ可能な代替です、その粒度は秒で、WindowsのSleep
(大文字の 's')の粒度よりも粗いため、粒度はミリ秒です。
2番目のエラーに関して、____XXXcall
_はMSVC++固有のトークンです(___dllXXX
_、___naked
_、___inline
_など)。 really stdcallが必要な場合は、__attribute__((stdcall))
などを使用してgccでエミュレートします。
注:コンパイルターゲットがWindowsバイナリでない場合and Win32 APIを使用している場合、stdcall
の使用または要件Bad Sign™です。
これを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++ -o s s.cpp
el@defiant ~/foo4/40_usleep $ ./s
nitratefirtilizers
「硝酸塩」を印刷し、1秒待ってから「肥料」を印刷しました
私の場合、[〜#〜] s [〜#〜] leep and NOT s 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
_を含めることを忘れないでください(Not cunistd
)