Auf Methode Sleep() anwenden, aus einer anderen Methode/Thread
-
Hi, habe mich eben im Internet umgeschaut aber nichts dazu gefunden, aber kann man eine Methode pausieren für eine Zeit oder bis ein "resume" Befehl geschickt wird?
Einfaches CodeBeispiel:int main(){ _beginthread(andere_main,0,NULL); // oder CreateThread... int Sekunde=0; while (1){ printf("%d Sekunde\n",Sekunde); Sleep(1000); Sekunden++; } } void andere_main(void *pParams){ while (1){ //zweite while, die separat läuft if (irgendwas passiert) //pausiere main für 1000ms oder bis zu einem "resume" befehl } }
also was ich jetzt suche ist dieser pausiere befehl. mit classen hab ich es gefunden, also zB: main.Sleep();
aber wie geht es für dieses Beispiel?
Danke und lg,
Cloud
-
Also wenn du streng standardkonform bleiben möchtest, dann kannst du dir mit den signals etwas basteln. Oder mit den C++11 Threadingfunktionen, falls deine Standardbibliothek diese schon unterstützt. Da dir Plattformunabhängigkeit deinem Code nach zu urteilen aber nicht wichtig zu sein scheint, schiebe ich dich mal nach WinAPI. Da kennt man bestimmt etwas, das besser ist als die ollen C-Signalfunktionen.
Was heißt hier eigentlich "andere_main"? Sollen das nun zwei verschiedene Prozesse oder zwei verschiedene Threads sein? Deine Beschreibung ist unklar.
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Unter WinAPI wäre das wohl CreateEvent, SetEvent, ResetEvent und WaitForSingleObject.
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682655(v=vs.85).aspx
-
Und mit anderen Threading-APIs (z.B. PTHREADS, Boost.Thread, std::thread) nimmt man Condition-Variablen.
-
Okay, habe mir das alles angeguckt, aber leider geht nicht das was ich eigentlich möchte...
Ich möchte auf die Funktion warten, und sobald sie am Ende angekommen ist, möchte ich etwas tun.
In meinem Fall ist es die Paket Funktion recv.
Ich würde also gerne warten, bis sie am Ende angekommen ist und dann einen Code ausführen.
Ich dachte vielleicht daran sie einfach neu zu definieren, sodass ich in ihr ein paar Umstellungen vornehmen kann, aber irgendwie kann man sie nicht selbst schreiben (?)
-
Sleep ist sehr restriktiv. Ein Prozess oder Thread wird 'schlafen gelegt' zugunsten anderer Dinge, die unbeirrt weiter laufen - mehr nicht. Was du suchst, geht mit Sleep wohl nicht!
-
recv - auf einem blocking Socket(wie es der Name schon sagst) wartet so lange, bis es die angegebene Anzahl der Daten abgerufen hat. Stehen keine Daten im Puffer, blockiert recv(...) so lange, bis es die Daten erhält.
-
zuckerlie schrieb:
recv - auf einem blocking Socket(wie es der Name schon sagst) wartet so lange, bis es die angegebene Anzahl der Daten abgerufen hat.
Das ist falsch.
-
oder wartet so lange, bis Daten abrufbar sind?!
-
Ja, bis Daten gelesen werden können. Anzahl der gelesenen Bytes kann zwischen 1 und angeforderter Menge aber variieren.
-
ah okay, verstehe das mit dem blocking socket... aber bei mir ist der recv nicht von mir selbst, sondern gedetoured... ich will warten, bis jedes paket da raus is und dann code ausführen...