V mém případě pomohlo napsat S skok a NE s leep – velmi zvláštní, ale fungovalo to!
Sleep je funkce Windows.
Pro Unix se podívejte na použití nanosleep (POSIX) nebo usleep (BSD; zastaralé).
A nanosleep příklad:
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;
}
}
Budete potřebovat <time.h> a <errno.h> , dostupný v C++ jako <ctime> a <cerrno> .
usleep je jednodušší na použití (stačí vynásobit 1000, takže je to funkce inline). Není však možné zaručit, že k tomuto spánku dojde po určitou dobu, je zastaralý a musíte extern "C" { } -include <unistd.h> .
Třetí možností je použít select a struct timeval , jak je vidět na http://source.winehq.org/git/wine.git/blob/HEAD:/dlls/ntdll/sync.c#l1204 (takto víno emuluje Sleep , což je samo o sobě jen obal pro SleepEx ).
Poznámka :sleep (malé 's'), jehož deklarace je v <unistd.h> , není přijatelná náhrada, protože její zrnitost je sekundová, hrubší než u Windows' Sleep (velké 's'), které má přesnost v milisekundách.
Pokud jde o vaši druhou chybu, ___XXXcall je token specifický pro MSVC++ (stejně jako __dllXXX , __naked , __inline , atd.). Pokud opravdu potřebujete stdcall, použijte __attribute__((stdcall)) nebo podobně, abyste jej emulovali v gcc.
Poznámka :pokud váš cíl kompilace není binární soubor Windows a používáte Win32 API, použití nebo požadavek na stdcall je 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");
}
použijte usleep() Místo spánku a Nezapomeňte zahrnout unistd.h (Ne cunistd )
Jak používat usleep v programu C++ na linuxu:
Vložte to do souboru s názvem s.cpp
#include <iostream>
#include <unistd.h>
using namespace std;
int main() {
cout << "nitrate";
cout << flush;
usleep(1000000);
cout << "firtilizers";
return 0;
}
Zkompilujte jej a spusťte:
[email protected] ~/foo4/40_usleep $ g++ -o s s.cpp
[email protected] ~/foo4/40_usleep $ ./s
nitratefirtilizers
Vytiskl 'dusičnan', počkal 1 sekundu a pak vytiskl 'firtilizers'