[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!


Anmelden zum Antworten