Alternative zu Sleep()
-
Guten Abend,
ich habe folgendes Problem: Der Compiler (Dev C++ 4.992) erkennt zwar die Funktion sleep(), doch diese wird nicht ausgeführt, das heißt, der jeweilige Thread wird ab dieser Funktion nicht weiter ausgeführt.
Gibt es eine andere Funktion, die genauso wie sleep() eine bestimmte Zeit abwartet?
Danke im Voraus
-
sleep() gehört nicht zum C Standard.
Es hängt also davon ab, welches System du verwendest.
Dev C++ 4.992 ist über 10 Jahre alt. Es gibt mittlerweil einen Nachfolger, der aktuell ist.
Da Dev-C++ für Windows ist: Da gibt es ein Sleep. Mit großem S.
-
Betriebssystem? Threadingframework? C kennt weder Threads noch Sleep, die Frage ist in diesem Forum falsch. Außerdem wäre ein Minimalbeispiel deines Problems hilfreich, denn möglicherweise handelt es sich einfach um einen Programmierfehler deinerseits.
Dev C++ 4.992? Ist das nicht über 10 Jahre alt?
-
Knerbel schrieb:
Guten Abend,
ich habe folgendes Problem: Der Compiler (Dev C++ 4.992) erkennt zwar die Funktion sleep(), doch diese wird nicht ausgeführt, das heißt, der jeweilige Thread wird ab dieser Funktion nicht weiter ausgeführt.
Klingt aber genau nach dem, was sleep tun soll.
Haste evtl eine Vorlage gehabt, die
Sleep(1000);//schlafe 1000 Millisekunden == 1 Sekunde
macht und übersetzt zu
sleep(1000);//schlafe 1000 Sekunden == ca 20 Minütchen
-
C kann seit C11 sehr wohl threaden. Ob das von deinem Toolset welches von DevSchrott++ mitgeliefert wurde unterstützt wird ist eine andere Frage
Der aktuelle gcc kann das, du könntest also das vorinstallierte von DevC++ einfach updaten, sofern auch MinGW C11 unterstützt. Oder eine moderne IDE benutzen wie CodeBlocks oder VisualStudio benutzen, wobei ich deren C11 Stand nicht weiß.
Wenn du unter windows unterwegs bist, kannst du auch Sleep() aus windows.h benutzen.
-
roflo schrieb:
Oder eine moderne IDE benutzen wie CodeBlocks oder VisualStudio benutzen, wobei ich deren C11 Stand nicht weiß.
Also Code::Blocks 13.12 unterstützt es nicht, Dev-c++ auch nicht, haben beide unter Windows MinGW mitgeliefert.
-
Bitmapper schrieb:
roflo schrieb:
Oder eine moderne IDE benutzen wie CodeBlocks oder VisualStudio benutzen, wobei ich deren C11 Stand nicht weiß.
Also Code::Blocks 13.12 unterstützt es nicht, Dev-c++ auch nicht, haben beide unter Windows MinGW mitgeliefert.
Es nutzt ohnehin niemand ernsthaft die C11-Threads. Der Threadersteller garantiert auch nicht. Das ist kein Ausschlusskriterium.
-
Ich fasse mal zusammen:
/* WinAPI, nicht threadsafe */ #include <windows.h> VOID WINAPI Sleep(DWORD dwMilliseconds); /* POSIX, threadsafe */ #include <unistd.h> unsigned sleep(unsigned seconds); /* POSIX aber deprecated, NICHT reentrant/threadsafe */ #include <unistd.h> int usleep(useconds_t useconds); /* POSIX, threadsafe */ #include <time.h> int nanosleep(const struct timespec *rqtp, struct timespec *rmtp);
/* ANSI C, busy-loop! */ void sleep( unsigned long waitms ) { clock_t goal; goal = (double)CLOCKS_PER_SEC*waitms/1000. + clock(); while( goal > clock() ) ; }
-
@Wutz
Was soll "nicht threadsafe" bei ner Sleep-Funktion heissen?Und wenn es heissen soll was ich meine, wie zum Geier kommst du dann darauf dass
Sleep(DWORD)
von Windows nicht threadsafe wäre? Natürlich ist das threadsafe!
-
Nicht threadsafe heißt nicht threadsafe gemäß POSIX-Doku.
Trolle woanders rum aber nicht bei mir.
-
Da fühlt sich jamend wieder cool.
-
Wutz schrieb:
Nicht threadsafe heißt nicht threadsafe gemäß POSIX-Doku.
Trolle woanders rum aber nicht bei mir.Um, du willst uns hier aber nicht ernsthaft erzählen, dass man einen Aufruf von Sleep() oder usleep() in eine Critical Section packen muss, oder!?
-
Ich denke mal es geht darum, was passiert, wenn ein signal dazwischenfunkt: http://pubs.opengroup.org/onlinepubs/009695399/functions/usleep.html
-
roflo schrieb:
Ich denke mal es geht darum, was passiert, wenn ein signal dazwischenfunkt: http://pubs.opengroup.org/onlinepubs/009695399/functions/usleep.html
I see, nachdem ich nie was mit POSIX zu tun hab, war mir nicht bewusst, dass usleep() so kaputt ist. Win32 Sleep() ist aber auf jeden Fall threadsafe, wie man überhaupt auf die Idee kommen kann, dass das anders sein könnte, ist mir ehrlich ein Rätsel...