boost::asio序列2:execution_context

class io_context
  : public execution_context

execution_context是io_context的基類,表示函數對象執行的上下文。

execution_context代表函數對象執行的位置。

execution_context和services

(1) execution_context實現一個可拓展的,類型安全的,services多態集合,通過service type 索引。 

(2) services 用於管理用於跨execution_context共享的資源。例如,timers可能的通過單個timer隊列實現,該隊列被保存在一個service中

通過模板函數use_service(), add_service(), has_service()訪問exection_context對象的services

調用use_service<Service>(),類型參數Service用於選擇service使得全部的成員變得可使用。 如果service在execution_context中不存在,則類型爲Service的對象將被創建並且加入到exection_context中。通過has<service<Service>()檢查exection_context是否實現對應的Service。

Service對象可以通過顯示調用模板函數add_service<Service>()添加到exection_context中。如果Service已經存在則拋出service_already_exists異常。如果service的擁有者和exection_context參數不是相同的對象則拋出invalid_service_owner異常。

通過調用user_service<>()獲取exection_context對象的service的引用,那麼,在exection_context對象存在時都可用

全部service實現都以execution_context::service作爲基類。 自定義services可以通過繼承exection_context,並且,通過add_service()加入exection_context中。

exection_context作爲具體的exection context types 的基類,例如io_context是繼承類型的示例。

繼承於exection_context的類在析構時,調用順序必須爲:

execution_context::shutdown()

execution_context::destory()

通過使用shared_ptr<>對象,析構順序能夠簡化資源管理,共享指針對象關聯的對象的生命週期關聯到一個connection(或其他異步操作序列),共享指針對象關聯的對象能夠綁定到異步操作關聯的handler:

(1) 當單個connection結束/全部關聯的操作完成,對應的handler對象將被銷燬,並且,全部的shared_ptr指向的對象被銷燬

(2) 爲了關閉整個程序,io_context對象的stop()函數被調用用於越快越好地終止任意run(),通過io_context的析構函數調用shutdown()和destroy()銷燬全部阻塞的handlers和觸發全部shared_ptr關聯的對象銷燬

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章