[Linux] sleep, uspeel, nanosleep usw.

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

#Reaper

Newsposter

Betreff: [Linux] sleep, uspeel, nanosleep usw.

BeitragDo, Nov 13, 2008 23:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich.. habe mal wieder ein Problem.
Ich habe mir eine kleines Tool für meinen vServer geschrieben, welches den aktuellen Traffic in einer Datei für eine Statistik speichert.
Das Tool soll aber nur z.B. alle 5 Minuten (okok, Monster-Delay Wink) tätig werden. Dazu habe ich Delay verwendet. Nur unter Linux ist die Delay-Funktion ja keine "richtige" Delay-Funktion: Die Prozess verbrauch im Sleep-Modus allerdings rund 0.1% CPU-Auslast (ok, ist nicht viel, aber trotzdem nicht gewollt). Das liegt an dem (wie ich finde) seltsamen Aufbau der Delay-Funktion unter Linux, den sich da Mark ausgedacht hat:
Code: [AUSKLAPPEN]
void bbDelay( int millis ){
   if (millis<0) return;
   int t=bbMilliSecs();
   while( bbMilliSecs()-t<millis ){
      sleep( 1 );
   }
}


Nun wollte ich halt direkt sleep() verwendet, allerdings musste ich feststellen, das sleep() schon bei einer Dauer von 1 Sekunde schlapp macht. Selbes mit usleep() und nanosleep(). Der Code wird einfach ungebremst weiter ausgeführt. Entweder ich mache was falsch oder es ist unter Linux einfach nicht möglich..?
Einen Timer kann ich dafür wohl kaum verwenden. Cron-Jobs hätte ich auch nehmen können, wollte ich in diesem Fall aber nicht unbedingt.
Weiß jemand Rat? Smile
Danke fürs lesen. Wink


MfG
#Reaper
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

amon

BeitragFr, Nov 14, 2008 17:01
Antworten mit Zitat
Benutzer-Profile anzeigen
über ein shellscript

while /usr/bin/true
do
command
sleep 100
done

hamZta

Administrator

BeitragFr, Nov 14, 2008 17:56
Antworten mit Zitat
Benutzer-Profile anzeigen
How about a cronjob?

Erstell einen neuen Cronjob der dein Programm alle 5 Minuten aufruft. Ist denk ich hier die bessere Lösung.
Blog.

Geeecko

BeitragFr, Nov 14, 2008 18:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Cron-Jobs hätte ich auch nehmen können, wollte ich in diesem Fall aber nicht unbedingt.

ich kenne mich mit linux nicht aus, aber ich würde vllt. ein "Master"-Programm machen?
Also fals es das wert ist.[/code]

Valnar

BeitragFr, Nov 14, 2008 18:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Cron-Jobs hätte ich auch nehmen können, wollte ich in diesem Fall aber nicht unbedingt.

Warum?
Dafür sind Cronjobs gedacht!
 

#Reaper

Newsposter

BeitragFr, Nov 14, 2008 18:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm..
Eigentlich wollte ich kein Cron-Jobs verwenden. Aber ich denke ich werde mir das nochmals überlegen. Dadurch wird auch ein großer Teil meines Tools unnötig. Naja, wenn ich mir es so überlege.. war es das vielleicht eh.. :-/ (Hatte eigentlich auch noch einen etwas anderen Verwendungszweck vor.)
Ansonsten wundert es mich dennoch, dass sich unter Linux keine Delays von nichtmal 1 Sekunde realisieren lassen. Und wegen dem Shell-Script: Weiß jemand, wie ich an den Code von sleep herankomme? Unter Debian wollte es mit apt-get source nicht klappen.
Danke für euren Rat Smile


MfG
#Reaper
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group