readln (f,s) erzeugt 100% cpu last in linux

04/12/2007 - 09:56 von Frank Boehm | Report spam
"Free Pascal Compiler version 2.2.0 [2007/09/24] for i386" in linux.

Ein einfaches Programm, das eine Auswertung eines logfiles durchfuehrt.

while true do begin
readln(f,s);
blablub, auswertung
end;

In dem logfile werden nur wenige Zeilen pro Stunde angehaengt. Die
Auswertung meines Programms ist kurz und sollte auch nur wenig CPU
Zeit brauchen.

Trotzdem braucht das Freepascalprogramm beim Warten die gesamte freie
CPU Zeit fuer ein einfaches readln solange nichts zu tun ist.

cu Frank

"Rabatt, mein Sohn, das lass dir sagen,
wird immer vorher aufgeschlagen."
 

Lesen sie die antworten

#1 Stefan Reuther
04/12/2007 - 18:24 | Warnen spam
Frank Boehm wrote:
Ein einfaches Programm, das eine Auswertung eines logfiles durchfuehrt.

while true do begin
readln(f,s);
blablub, auswertung
end;


[...]
Trotzdem braucht das Freepascalprogramm beim Warten die gesamte freie
CPU Zeit fuer ein einfaches readln solange nichts zu tun ist.



'f' ist eine Datei? Dann wird 'readln' jedes Mal den Fehler "Dateiende"
bekommen, eine Leerzeile erhalten und danach die Schleife von vorn
beginnen (sollte es nicht eigentlich einen Laufzeitfehler werfen?). Du
kannst bei Dateien nicht auf diese Weise warten, dass was angehàngt wird.

"tail -f" macht soetwas wie du erreichen willst, im Allgemeinen derart,
dass es bei Erreichen des Dateiendes auf eine Größenànderung der Datei
wartet (while GrößeUnveràndert do Delay(...)). Möglicherweise ist es am
Einfachsten, dein Programm von der Standardeingabe lesen zu lassen und
dann mit
tail -f logfile.txt | ./deinprogramm
zu starten.


Stefan

Ähnliche fragen