www.mikrocontroller.net

Forum: PC-Programmierung warten im c++ programm


Autor: philip (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Thomas_v2.1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

Matthias

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: keksohr (Gast)
Datum:

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

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sleep( 200 );
wartet 200ms.
wie ist denn die fehlermeldung?

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.