2012-01-04 18 views
6

io_service :: poll_one Uruchom pętlę przetwarzania zdarzenia io_service , aby wykonać jedną gotową procedurę obsługi.Jaka jest różnica między boost :: io_service poll_one i run_one?

vs

io_service :: run_one Uruchom przetwarzania zdarzeń pętlę obiektu io_service za wykonać co najwyżej jednego przewodnika.

Z tego wyjaśnienia wydawałoby się, że poll_one może wykonać więcej niż jeden handler? Czy run_one lub poll_one używają dowolnego wątku, który nazywa się run() lub tylko wątkiem, który wywołuje poll_one/run_one?

Dokumentacja dla ASIO jest bardzo rzadka.

+0

jeden wykonuje jedną gotową obsługi, a drugi wykonuje jeden obsługi (gotowy lub nie). – akappa

+0

ok, jaka jest różnica między programem obsługi GOTOWY a takim, który nie jest? – Eloff

+0

jeśli masz gniazdo, a zadaniem modułu obsługi jest odczytanie czegoś z niego, to gotowy handler to taki, który jest dołączony do niepustego gniazda (więc nie musisz czekać na dane, które pochodzą z sieci) – akappa

Odpowiedz

12

poll_one nastąpi natychmiast (bez blokowania) w przypadku braku zdarzenia do przetworzenia.

run_one zablokuje wywołujący wątek, aż jedno zdarzenie będzie gotowe do przetworzenia.

Można również sprawdzić jakąś dokumentację here

+0

Zatem dokumentacja dla run_one powinna odczytywać "bloki, dopóki nie wykona dokładnie jednego handler'a" kontra "wykonuje co najwyżej jeden handler"? – Eloff

+0

Tak, dodaj inne słowa :) –

+0

To jest mylące. "Co najwyżej" tutaj oznacza 0..1, ale jeśli blokuje się, dopóki nie przetworzy zdarzenia, kiedy może kiedykolwiek powrócić po przetworzeniu 0 zdarzeń? – Eloff

Powiązane problemy