Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zeit totschlagen



keinWort
13-09-2005, 08:11
Hallo Leute,

ich habe die Aufgabe unter C++ ein Programm (CMD) zu schreiben, das eine Funktion nur in bestimmten Zeitabständen aufruft.
Dazu verwende ich die Funktion

Sleep(xyz);

Das Programm verbraucht aber ca. 10% Systenresourcen. Das ist mir zu viel. Gibt es da noch andere, bessere Möglichkeiten?


Grüße

SeeksTheMoon
13-09-2005, 08:58
vielleicht bringt es was, das in einen anderen Prozess zu verlagern. Allerdings sind 10% noch recht wenig (wenn auch nicht schön). Wenn es 100% oder so wären, dann würde ich mir erst Sorgen machen.

Lin728
13-09-2005, 09:55
Hallo Leute,
Das Programm verbraucht aber ca. 10% Systenresourcen. Das ist mir zu viel. Gibt es da noch andere, bessere Möglichkeiten?
Grüße
Aber das dürfte nmicht vom sleep her kommen - so lange das ding "schläft" ist es weg vom scheduler und bekommt keine prozessorzeit. Sehr kurze sleeps (1-2msec) können allerdings wegen des scheduling-aufwandes teuer werden...

RHBaum
13-09-2005, 11:15
das eine Funktion nur in bestimmten Zeitabständen aufruft.
Wer definiert denn die zeitabstaende ?
Sind die zeiten exakt oder wartest du auf was "bestimmtes" ....

wenn ja, solltes du auf multithreading und ner eventsteuerung umsteigen ....

Ciao ...

keinWort
13-09-2005, 11:47
Die Zeitabstände sind fest.

Das Programm gehört zu meinem Watchdog und triggert den Watchdog z.B. alle 30s.

Joghurt
13-09-2005, 13:07
Das Programm verbraucht aber ca. 10% Systenresourcen.Was denn?
Systemresourcen (Speicher) oder CPU-Zeit?

keinWort
13-09-2005, 14:44
Ich meinte selbstverständlich die CPU Zeit, da Arbeitsspeicher normalerweise in MB angegeben wird. Arbeitsspeicher ist auch nicht unser Problem (512Mb) sonder der Prozessor (Celeron 300MHz).

Für alle die sich jetzt wundern warum wir mir einem so alten prozessor abrbeiten sei gesagt, dass der Rechner ca. 9cmx9cmx15mm groß ist und heute noch 300e Euro kostet.

Grüße

Christian

keinWort
14-09-2005, 14:11
Ich habe den Übertäter

Es war der Befehl

system("CLS");

Der die Systemlast erzeugt. Gibt es da noch andere Möglichkeiten um den Schrim zu löschen?

RHBaum
15-09-2005, 10:25
Kenn mich mit konsole nich sooo aus ...

Aber:
1. Konsole und Terminal sind Plattformabhaengig ... ne loesung im Reinen C++ wirst da nich finden ...

2. gibt es escape zeichenfolgen fuer die meisten terminals, die bestimmte operationen ausfuehren, vielleicht hilft das ...

3. gibt es libraries (plattformabhaengig) die eine erweiterete steuerung ermoeglichen ... ncurses, die borland geschichte fuer die dos boxen (conio.h) ... etc

die philosophie der frueheren terminals war, das das programm nur sequentiell auf die konsole schreibt, das loeschen und anderweitiges steuern wurde vom user , also vom programm unabhaengig ausgeloest. das hatte den vorteil, das man terminals wie dateien als datenstrom behandeln konnte ... und alle terminals fuer das programm gleich waren, bzw auf konsolen umgeleitet werden konnten, die sonstwo und wie implementiert waren (mainframe) ... und auch nur das wird vom C / C++ Standard unterstuetzt (iostream).
vielleicht solltes dich damit zufrieden geben und noch mal ueberdenken ob du wirklich nen clear auf dem screen brauchst ...
wenn doch, wuerd ich gleich naegel mit koepfen machen und ne textmodus lib ( z.B. ncurses unter linux) zu rate ziehen und ne gescheitere ausgabe bauen
willst keine lib nehmen, wirst doch wohl in die eigenheiten deiner eigenen konsole (vielleicht dos-box) einarbeiten muessen ...

Wuesst gar nich mehr, wie das unter dos heutzutage geht ....
fureher konnte man auf den Bildspreicher (dos ) direkt schreiben ... somit konnte man jeglichen konsolenbetrieb umgehen ... heute unter win32 und auf festen speicher schreiben ->aua :-)

Ciao ...

7.e.Q
19-09-2005, 14:13
printf("\e[2J");



sollte den Bildschirm löschen.

Joghurt
19-09-2005, 14:44
Aber nur unter Unix oder unter Windows, wenn ANSI.SYS geladen ist; was sehr unwahrscheinlich ist.

7.e.Q
19-09-2005, 14:50
Aber system("cls"); aufzurufen ist doch sehr prozessor-intensiv. Hätte mir auffallen müssen, daß es sich dabei um einen Windows/DOS-Befehl handelt. Aber man geht hier ja eigentlich davon aus, daß es sich um Linux-Fragen handelt, da ja "Mr. UNIX" eigentlich eine Daseinsgrundlage dieses Forums als Linux-Entwickler-Forum impliziert.

LSSuper2004
29-09-2005, 17:27
Wenn du nach einer Wartefunktion suchst:

den folgenden Codeausschnitt einfügen und die time.h einbinden:

void wait(double ms)
{
double pause;
clock_t start;
pause = (ms/1000)*CLOCKS_PER_SEC;
start = clock();
while (clock() < start+pause)
;
}

Weiß aber nichts von der Prozessorbelastung ...

-- penma --

Joghurt
29-09-2005, 17:34
Weiß aber nichts von der Prozessorbelastung ...Dürfte so um die 100% sein.

LSSuper2004
30-09-2005, 17:48
Danke, Joghurt, wieso komm ich da jetzt erst drauf?

Bei mir warens (wenn ich richtig gemessen habe) um die 30 Prozent.
Tja, würde sagen, euer Problem ist jetzt meins. ;)

-- penma --

peschmae
30-09-2005, 18:50
Nein. Deins. Denn "wir" warten nicht so ;)

MfG Peschmä

LSSuper2004
30-09-2005, 18:52
:mad: äh, ja.

rais
30-09-2005, 22:27
:mad: äh, ja.
Warum so verärgert?
Wenn Du Dich schlafen legst, willst Du doch auch nicht alle Naslang auf'n Wecker gucken, nur um zu sehen, ob Du schon wieder aufstehen mußt ;)
Das solltest Du Deinem Programm auch gönnen - wie das geht, steht hier doch schon im thread:)
MfG,

RapidMax
30-09-2005, 22:34
Wenn Du Dich schlafen legst, willst Du doch auch nicht alle Naslang auf'n Wecker gucken, nur um zu sehen, ob Du schon wieder aufstehen mußt ;)

:D Wunderbar diese Assoziation.

Gruss, Andy

peschmae
01-10-2005, 09:55
Warum so verärgert?
Wenn Du Dich schlafen legst, willst Du doch auch nicht alle Naslang auf'n Wecker gucken, nur um zu sehen, ob Du schon wieder aufstehen mußt ;)
Das solltest Du Deinem Programm auch gönnen - wie das geht, steht hier doch schon im thread:)


Naja, ich wär auch verärgert wenn ich die letzten 20 Jahre jede Nacht immer auf den Wecker geguckt hätte und mir erst jetzt einer sagt dass der Wecker übrigens am Morgen klingelt ;)

MfG Peschmä

rais
01-10-2005, 20:40
Naja, ich wär auch verärgert wenn ich die letzten 20 Jahre jede Nacht immer auf den Wecker geguckt hätte und mir erst jetzt einer sagt dass der Wecker übrigens am Morgen klingelt ;)

Das schon, aber nur weil Du Dich dann fragen müßtest, warum Du nicht schon vor 19 Jahren, 11 Monaten und so grob 30 Tagen auf die Idee gekommen bist, jemand anderen zu fragen, wie das mit dem Wecker wohl so richtig funktioniert ;)
Übrigens hatte ich eher den Eindruck, daß Du penma - die Sig bekommt hier ganz neue Dimensionen - praktisch nur verraten hast, daß Dein Wecker (um beim Thema zu bleiben) _anders_ klingelt;)
MfG / Schönes Wochenende noch,