GNU/Linux >> Linux Esercitazione >  >> Linux

Errore C++:la sospensione non è stata dichiarata in questo ambito

Nel mio caso ha aiutato scrivere S leep e NON s leep - molto strano, ma ha funzionato!


Sleep è una funzione di Windows.

Per Unix, cerca di usare nanosleep (POSIX) o usleep (BSD; deprecato).

Un nanosleep esempio:

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

Avrai bisogno di <time.h> e <errno.h> , disponibile in C++ come <ctime> e <cerrno> .

usleep è più semplice da usare (basta moltiplicare per 1000, quindi rendila una funzione inline). Tuttavia, è impossibile garantire che la sospensione si verifichi per un determinato periodo di tempo, è deprecato e devi extern "C" { } -include <unistd.h> .

Una terza scelta è usare select e struct timeval , come visto in http://source.winehq.org/git/wine.git/blob/HEAD:/dlls/ntdll/sync.c#l1204 (questo è il modo in cui wine emula Sleep , che a sua volta è solo un wrapper per SleepEx ).

Nota :sleep ('s' minuscola), la cui dichiarazione è in <unistd.h> , non un sostituto accettabile, poiché la sua granularità è secondi, più grossolana di quella di Sleep di Windows ('s' maiuscola), che ha una granularità di millisecondi.

Per quanto riguarda il tuo secondo errore, ___XXXcall è un token specifico di MSVC++ (così come __dllXXX , __naked , __inline , eccetera.). Se davvero hai bisogno di stdcall, usa __attribute__((stdcall)) o simile per emularlo in gcc.

Nota :a meno che la tua destinazione di compilazione non sia un and binario di Windows stai usando le API Win32, l'uso o un requisito per stdcall è A Bad Sign™.


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

usa usleep() Invece di dormire e Non dimenticare di includere unistd.h (Non cunistd )


Come usare usleep in un programma C++ su Linux:

Inseriscilo in un file chiamato s.cpp

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

Compilalo ed eseguilo:

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

Ha stampato 'nitrato', ha aspettato 1 secondo, quindi ha stampato 'firtilizzatori'


Linux
  1. Errore [Risolto]:snap "pacchetto" non trovato

  2. Correzione dell'errore di classe ZipArchive non trovato [PHP 7]

  3. Errore di compilazione RSAKeyFind (make):rsakeyfind.cpp – "memcmp, read, close" non è stato dichiarato in questo ambito [risolto]

  4. Comando yum-config-manager non trovato [fissare]

  5. c_rehash :Errore comando non trovato – Soluzione

Risoluzione dei problemi di errore "Bash:comando non trovato" in Linux

If...else...if Statement (comando non trovato errore)?

Errore Linux c++:riferimento non definito a 'dlopen'

Errore di asserzione mutex Pthread

tar:errore non recuperabile:uscita ora

ssh-copy-id non funziona