[boost::asio] io_service.post
-
Was macht io_service.post?
Hier wird es verwendet, und ich werde aus der Dokumentation oder aus dem Beispiel selbst nicht schlau. (siehe do_write)
Würde mich über eine Erklärung freuen.
Danke
-
Die Funktion die io_service::post(..) übergeben wird, wird auf einem der Threads die io_service::run(..) aufgerufen haben ausgeführt. Das ist unabhängig davon auf welchem Thread io_service::post(..) aufgerufen wird - dieser Aufruf kehrt sofort zurück!
-
theta schrieb:
Die Funktion die io_service::post(..) übergeben wird, wird auf einem der Threads die io_service::run(..) aufgerufen haben ausgeführt. Das ist unabhängig davon auf welchem Thread io_service::post(..) aufgerufen wird - dieser Aufruf kehrt sofort zurück!
hm so ganz habe ich das noch immer nicht verstanden.

Was hat den Programmierer dieses Beispiels gehindert do_write direkt aufzurufen statt den Umweg über io_service::post.Danke für deine Antwort!
-
Ich nehme an, dass es so gemacht ist, dass nicht (via locking) synchronisiert werden muss - denn wir haben zwei threads im spiel (main thread und der zusätzliche) - welche beide die queue "modifizieren".
Edit:
Anmerkung: Das funktioniert nur, weil nur ein Thread im Pool ist (= nur einer hat io_service::run(..) aufgerufen) - ansonsten müsste man ein strand benutzen.
-
theta schrieb:
Ich nehme an, dass es so gemacht ist, dass nicht (via locking) synchronisiert werden muss - denn wir haben zwei threads im spiel (main thread und der zusätzliche) - welche beide die queue "modifizieren".
Edit:
Anmerkung: Das funktioniert nur, weil nur ein Thread im Pool ist (= nur einer hat io_service::run(..) aufgerufen) - ansonsten müsste man ein strand benutzen.Ah das ergibt Sinn!
Danke dir theta!