PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zeitlich limitierter Funktionsaufruf



Ghostrider
20-11-2008, 15:08
Hallo,

schon wieder eine Frage: Ich möchte gerne einen Funktionsaufruf prinzipiell zeitlich limitieren. Konkret handelt es sich dabei die Funktionen read(...) und write(...) aus QextSerialPort.

Der Grund: Das Programm soll Geräte steuern, und wenn ein Gerät nicht antwortet, soll z.B. der Magnet nicht mit voller Leistung weiterlaufen bis jemand das Programm manuell abbricht. Ich habe leider nicht herausgefunden, ob die genannten Funktionen sowieso nur einen Versuch unternehmen und, falls das Gerät nicht erreichbar ist, eine Fehlermeldung zurückgeben und das Programm weiterlaufen lassen.

Beatkiller
20-11-2008, 18:44
In etwa so?



// Dauer des Durchlaufs
#define DURATION 10

// Variablen
time_t begin;

// Startzeit festlegen
begin = time();

while( DURATION > time() - begin )
{
read( ... );
write( ... );
}

fprintf( stdout, "abgelaufen" );


Der Code geht natürlich davon aus, das read() nonblocking ist.

anda_skoa
20-11-2008, 19:44
Wenn du das Signal readyRead() benutzt, um das Lesen zu starten und mit bytesAvailable() das derzeitige Maximum ermittelst, sollte read() schonmal nicht blockieren.

write() puffert normalerweise, eventuell kann man mit einem eigenen Zusatzpuffer und bytesWritten() arbeiten, wenn der interne Puffer zu schnell voll wird.

Ciao,
_

Ghostrider
21-11-2008, 15:45
Danke für die schnelle Antwort. Das war sehr hilfreich. Habe jetzt vor jedes read() ein waitForReadReady() gesetzt.

anda_skoa
21-11-2008, 19:28
Damit blockierst du dann aber, ich dachte du möchtest genau das verhindern?

Ciao,
_