Forum: PC-Programmierung warten im c++ programm


von philip (Gast)


Lesenswert?

hallo,

ich schreib gerade an einem c++ programm
und brauch nun für ne schleife eine funktion mit der ich eine pause von
500-1000ms machen kann so genau muss das nicht sein, ich will nur halt
nehalbe bis eine sekunde pause machen, wichtig ist, das dabei nicht der
cpu genuzt wird, also cpu einfach dumm beschäftigen mit ihrgend welchen
hoch runter zählen bringt mir da jetzt herzlich wenig,

hätte einer ideen ?

von Thomas_v2.1 (Gast)


Lesenswert?

In C könnte man das so machen:

aktuelle Zeit holen mit:
time(&jetzt);

und dann:

while(difftime(time(NULL),jetzt)<1);

um beispielsweise 1s zu warten.

Thomas

von Matthias (Gast)


Lesenswert?

Hi

Sleep() bzw. sleep() je nach OS. Ist zwar C aber von C++ auch (wie fast
jede C Funktion) zu benutzen.

Matthias

von Tobi (Gast)


Lesenswert?

@thomas
das kommt doch dem runterzählen gleich, dass philip nicht haben will

matthias lösung ist da einiges besser, da diese funktion unter
aktuellen os den thread einfach solang aus dem scheduler nimmt und die
anderen drankommen

von keksohr (Gast)


Lesenswert?

@Matthias mach mal bitte nen komplettes beispiel ihrgend wie läuft das
net... gibt ne fehle meldung mit der variabel jetzt...

von Tobi (Gast)


Lesenswert?

Sleep( 200 );
wartet 200ms.
wie ist denn die fehlermeldung?

von Hans (Gast)


Lesenswert?

übern buckel ins knie geschosssen... timer starten und auf ein event
warten, dass im timer-callback gesetzt wird (unter win) mit
WaitForSingleObject... das verursacht 0 last... einziges prob nur win
und vor allem aufwendig...

sleep verursacht glaub ich last...bin mir aber nicht sicher... und wenn
du multithreading machst kanns sein, dass die threads im hintergrund
dadurch keine messages bekommen... dann musst du einen schleife fahren
in der du immer 10ms machst (weniger kann win in wirklichkeit nicht)
und dann ein peekmessage,translatemessage,postmessage machen.. sonnst
geht COM nicht in deinen threads im hintergrund...

aja... deinen haupt-thread würd ich persönlich nie in einen sleep
jagen.. .weil dann kann dieser nicht z.b auf window-resize reagieren
(was anderes ist das auf der konsole oder am uc)...

73

von Chris (Gast)


Lesenswert?

@Hans:
1. Sleep verursacht unter Windows ebenfalls überhaupt keine Last und
ist auf jeden Fall einfacher zu benutzen als ein Timer.

2. Threads laufen normalerweise unabhängig voneinander, daher kann man
beruhigt einen Thread mit Sleep schlafen legen; ob WaitForSingleObject
in so einem Fall sinnvoller wäre, steht auf einem anderen Blatt. Dass
man die Nachrichtenschleife nicht lahmlegen sollte, sollte IMHO
selbstverständlich sein.

3. Ich denke, der OP meint eine Konsolenanwendung, da er von "C++"
und nicht von einem bestimmten GUI-System sprach. Wenn ein Poster sein
System nicht nennt, ist es in 99.9% aller Fälle Windows (empirisch
bewiesen...); bei der Konsole ist Sleep erste Wahl. Bei einer
grafischen Windowsanwendung wäre wirklich ein Timer sinnvoller.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.