Rechner unter C++ schlafen lassen

Herakles

Profifragensteller
Moin!

Ich möchte meinen Rechner auf Daten von anderen Rechnern in einem Cluster warten lassen. Am einfachsten geht das sicher mit

Code:
...
sleep(1);
...

in C++. Problem an der Geschichte ist, dass mir eine Sekunde eigentlich zu lang ist. Workaround von mit selbst: Schleife bauen, die einfach einen Wert hochzählt. Auf diesen Rechnern hier im Hause hab ich etwa eine drittel Sekunde hiermit hinbekommen:

Code:
  if (!recStrm.probeAny()) {
    cout << "." << flush;
    cout<<"time: "<<time(0)<<endl;
    for (double po=0; po<9999999; po++) {}
    cout<<"time_after: "<<time(0)<<endl;
    return 0;
  }

Das ist allerdings eine ungenügende Lösung, weil so der Rechner, der auf die Daten der anderen im Cluster wartet, mit dem Zählen ausgelastet wird, also CPU-Zeit verschwendet. Dieser empfangende Rechner zählt aber selbst auch noch zu den "Clients" im Cluster und rechnet an den gleichen Problemen, wie alle anderen. Er würde also die Gesamtrechnung verlangsamen, weil er durch diese Schleife immer der letzte wäre, der mit seiner Rechnung im Cluster fertig ist.

Gibt es andere Möglichkeiten, oder gar eingebaute C++-Methoden, die den Rechner einfach für eine bestimmte Anzahl Millisekunden warten lassen?

Danke Männers!


Herakles
 
Wenn Du auf Daten von anderen Rechner warten laesst, dann kannst Du doch theoretisch auch einfach Dein Programm im read() Call warten lassen und wenn dort Daten ankommen, laeuft's weiter.

Ich kenn Dein Programm nicht, deswegen ein bisschen geraten... ;)

HTH
 
@xbit: im Code oben kann man es schon ein wenig sehen, wie gearbeitet wird. Ich arbeite mit pvm in der Version 3.4 und da wird mit recStrm() auf Daten der Clients gewartet. Da das bereits von meinem Vorgänger implementiert wurde und ich keine Lust habe, die ganze Server/Client Architektur zu überarbeiten, möchte ich es gern größtenteils so lassen, wie es ist.

@-ec-: JA! Es klappt wunderbar. Nun bekomme ich Wartezyklen von einer viertel Sekunde hin (das reicht vorerst) und könnte noch tiefer gehen, alles ohne Powereinbußen. Danke!

Herakles
 
Zurück
Oben