Das Blockierungsverhalten von io_service::run() ergibt sich aus der Handhabung von Arbeit und Handlern. Es bleibt blockiert, bis:
Wenn io_service::run() blockiert, bis „keine weiteren Handler zu versenden sind“, bedeutet dies dass keine ausstehenden Aufgaben in Form von registrierten Rückrufen vorliegen.
Im ersten Beispiel (3a) blockiert der io_service innerhalb von run(), bis alle drei veröffentlichten Fibonacci-Berechnungshandler ausgeführt wurden.
Der Client-Code scheint asynchrone E/A (async_receive) zu verwenden, aber das ist nicht der Fall verhält sich effektiv synchron:
Die entsprechende synchrone Operation wäre:
boost::asio::error_code error; std::size_t bytes = socket.receive(buffer, error); // Execute handler with error and bytes
Das Mischen synchroner und asynchroner Vorgänge kann zu Komplexität führen. Erwägen Sie, diese Praxis zu vermeiden. Die Boost.Asio-Dokumentation bietet wertvolle Einblicke in die Vorteile der asynchronen Programmierung.
Das obige ist der detaillierte Inhalt vonWann blockiert „boost::asio::io_service::run()'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!