GNU/Linux >> Tutoriales Linux >  >> Linux

Error de C++:la suspensión no se declaró en este ámbito

En mi caso me ayudó escribir S dormir y NO s leep - ¡muy extraño, pero funcionó!


Sleep es una función de Windows.

Para Unix, considere usar nanosleep (POSIX) o usleep (BSD; obsoleto).

Un nanosleep ejemplo:

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

Necesitarás <time.h> y <errno.h> , disponible en C++ como <ctime> y <cerrno> .

usleep es más simple de usar (simplemente multiplique por 1000, así que conviértalo en una función en línea). Sin embargo, es imposible garantizar que ese sueño ocurrirá durante un período de tiempo determinado, está obsoleto y debe extern "C" { } -incluye <unistd.h> .

Una tercera opción es usar select y struct timeval , como se ve en http://source.winehq.org/git/wine.git/blob/HEAD:/dlls/ntdll/sync.c#l1204 (así es como Wine emula Sleep , que en sí mismo es solo un contenedor para SleepEx ).

Nota :sleep (minúscula 's'), cuya declaración está en <unistd.h> , es no un sustituto aceptable, ya que su granularidad es de segundos, más gruesa que la del Sleep de Windows ('s' mayúscula), que tiene una granularidad de milisegundos.

Con respecto a tu segundo error, ___XXXcall es un token específico de MSVC++ (al igual que __dllXXX , __naked , __inline , etc.). Si realmente necesita stdcall, use __attribute__((stdcall)) o similar para emularlo en gcc.

Nota :a menos que su destino de compilación sea un binario de Windows y está utilizando las API de Win32, el uso de o un requisito para stdcall es una mala señal™.


#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() En vez de dormir y no olvides incluir unistd.h (No cunistd )


Cómo usar usleep en un programa C++ en Linux:

Pon esto en un archivo llamado s.cpp

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

Compílelo y ejecútelo:

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

Imprimió 'nitrato', esperó 1 segundo y luego imprimió 'fertilizantes'


Linux
  1. Arreglar el error Class ZipArchive no encontrado [PHP 7]

  2. Error de compilación RSAKeyFind (Make):rsakeyfind.cpp:"memcmp, read, close" no se declaró en este ámbito [Resuelto]

  3. Comando yum-config-manager no encontrado [Fijar]

  4. c_rehash:Error de comando no encontrado – Solución

  5. "Las variables efi no son compatibles con este sistema"?

Solución de problemas del error "Bash:Comando no encontrado" en Linux

¿Este error sobre Upstart/systemd con Runit?

If…else…if Declaración (error de comando no encontrado)?

Error de ldconfig:no es un enlace simbólico

sshpass:error de comando no encontrado

ssh-copy-id no funciona