In meinem Fall hat es geholfen, S zu schreiben leep und NICHT s leep - sehr seltsam, aber funktioniert!
Sleep ist eine Windows-Funktion.
Sehen Sie sich für Unix die Verwendung von nanosleep an (POSIX) oder usleep (BSD; veraltet).
Ein nanosleep Beispiel:
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;
}
}
Sie benötigen <time.h> und <errno.h> , verfügbar in C++ als <ctime> und <cerrno> .
usleep ist einfacher zu verwenden (multiplizieren Sie einfach mit 1000, machen Sie es also zu einer Inline-Funktion). Es ist jedoch unmöglich zu garantieren, dass dieses Schlafen für eine bestimmte Zeitdauer auftritt, es ist veraltet und Sie müssen extern "C" { } - Fügen Sie <unistd.h> ein .
Eine dritte Möglichkeit ist die Verwendung von select und struct timeval , wie in http://source.winehq.org/git/wine.git/blob/HEAD:/dlls/ntdll/sync.c#l1204 zu sehen (so emuliert wine Sleep , die selbst nur ein Wrapper für SleepEx ist ).
Hinweis :sleep (kleines 's'), dessen Deklaration in <unistd.h> steht , ist nicht ein akzeptabler Ersatz, da seine Granularität Sekunden beträgt, gröber als die von Windows' Sleep (großes 's'), das eine Granularität von Millisekunden hat.
Zu Ihrem zweiten Fehler, ___XXXcall ist ein MSVC++-spezifisches Token (ebenso wie __dllXXX , __naked , __inline , etc.). Wenn Sie wirklich stdcall benötigen, verwenden Sie __attribute__((stdcall)) oder ähnlich, um es in gcc zu emulieren.
Hinweis :es sei denn, Ihr Kompilierungsziel ist eine Windows-Binärdatei und Sie verwenden Win32-APIs, Verwendung von oder eine Anforderung für stdcall ist ein schlechtes Zeichen™.
#include <iostream>
#include <unistd.h>
using namespace std;
int main()
{
const long a=1000000;
long j;
cin >> j;
usleep(a*j);
puts("exit");
}
Verwenden Sie usleep() Anstatt zu schlafen und vergessen Sie nicht, unistd.h einzufügen (Nicht cunistd )
Wie man usleep in einem C++-Programm unter Linux verwendet:
Fügen Sie dies in eine Datei namens s.cpp ein
#include <iostream>
#include <unistd.h>
using namespace std;
int main() {
cout << "nitrate";
cout << flush;
usleep(1000000);
cout << "firtilizers";
return 0;
}
Kompilieren Sie es und führen Sie es aus:
[email protected] ~/foo4/40_usleep $ g++ -o s s.cpp
[email protected] ~/foo4/40_usleep $ ./s
nitratefirtilizers
Es druckte „nitrat“, wartete 1 Sekunde und druckte dann „firtilizers“