12 Stimmen

Was macht poll() mit einem Timeout von 0?

Ich betrachte die poll() man page und es sagt mir, wie sich poll() verhält, wenn positive und negative Werte für den Timeout-Parameter übergeben werden. Es teilt mir jedoch nicht mit, was passiert, wenn der Timeout 0 beträgt. Irgendwelche Ideen?

Wenn ich mir die epoll_wait() man page anschaue, sagt sie mir, dass bei einem Timeout-Wert von 0 sofort zurückgegeben wird, auch wenn keine Ereignisse verfügbar sind. Ist es sicher anzunehmen, dass sich poll() genauso verhalten würde?

9voto

Quassnoi Punkte 396418

Es wird sofort zurückkehren:

Wenn der Timeout größer als null ist, gibt er ein maximales Intervall (in Millisekunden) an, um auf die Bereitschaft eines beliebigen Dateideskriptors zu warten. Wenn der Timeout null ist, wird poll() ohne Blockieren zurückkehren. Wenn der Wert des Timeouts -1 ist, blockiert das poll() unbegrenzt.

, ab Mac OS X 10.5;

Maximales Intervall, um auf den Abschluss des Pollens zu warten, in Millisekunden. Wenn dieser Wert 0 ist, wird poll() sofort zurückkehren. Wenn dieser Wert INFTIM (-1) ist, wird poll() unbegrenzt blockieren, bis eine Bedingung gefunden wird.

, ab OpenBSD 3.8

3voto

Diego Sevilla Punkte 27639

Meiner Ansicht nach bedeutet das Warten auf einen Timeout, dass man einen Timeout "hat". Auf diese Weise würde ich erwarten, dass poll() tatsächlich die Dateideskriptoren überprüft und dann wartet, wenn keiner bereit ist, für einen Timeout von 0 Millisekunden (überhaupt keine Wartezeit). Aber tatsächlich signalisiert es nur, wenn eine Dateideskriptor verfügbar ist.

Ich habe auch den Linux-Quellcode überprüft und meines Wissens nach funktioniert es so: Zuerst wird der "zukünftige" Wartezeitpunkt berechnet, dann werden die Dateideskriptoren überprüft, und wenn keiner verfügbar ist, wird die angegebene Zeit gewartet.

Mit freundlichen Grüßen,

0voto

Sean Bright Punkte 114347

Von den Ubuntu-Man-Seiten:

Das Timeout-Argument legt ein oberes Limit für die Zeit fest, für die poll() blockiert, in Millisekunden. Ein negativer Wert für das Timeout bedeutet ein unbegrenztes Timeout.

Weil es keinen speziellen Fall für 0 gibt, würde ich davon ausgehen, dass poll() für 0 Millisekunden blockiert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X