GNU/Linux >> Linux の 問題 >  >> Linux

C++ エラー:スリープはこのスコープで宣言されていません

私の場合、 S と書くのに役立ちました リープとNOT s リープ - 非常に奇妙ですが、うまくいきました!


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 番目の選択肢は、select を使用することです。 と struct 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」)、ミリ秒単位の粒度です。

2 番目のエラー ___XXXcall について MSVC++ 固有のトークンです (__dllXXX と同様) 、 __naked__inline など)。あなたが本当に stdcall が必要です。__attribute__((stdcall)) を使用してください または同様に gcc でエミュレートします。

注意 :コンパイル ターゲットが Windows バイナリ and でない限り Win32 API を使用している、stdcall の使用または要件 は悪い兆候™です。


#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 ではありません )


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;
}

コンパイルして実行します:

[email protected] ~/foo4/40_usleep $ g++ -o s s.cpp
[email protected] ~/foo4/40_usleep $ ./s
nitratefirtilizers

「硝酸塩」を出力し、1 秒待ってから「肥料」を出力しました


Linux
  1. 「efi変数はこのシステムではサポートされていません」?

  2. Vi / Vim Editor エラーの修正方法 — E319:このバージョンではコマンドを使用できません

  3. Linux c++ エラー:'dlopen' への未定義の参照

  1. tar:エラーは回復できません:現在終了しています

  2. sshpass:コマンドが見つかりませんエラー

  3. ssh-copy-id が機能しない

  1. 私のLinuxの話:私はキャンディーではなくPCMagazineで育ちました

  2. [修正]エラー:スナップ「パッケージ」が見つかりません

  3. クラスZipArchiveが見つからないというエラーを修正しました[PHP7]