我正在實現簡單的服務器與boost::asio
和思考io-service-per-cpu模型(每個io_service有一個線程)。簡單的回調控制使用boost :: asio和C++ 11 lambda
我想要做的是讓一個io_service向另一個io_service請求一些作業(類似於消息傳遞)。
我認爲boost::asio::io_service::post
可以幫助我。
有兩個io_service
S,ios1
,ios2
,
和工作(功能)bool func(arg *)
,
,並完成處理void callback(bool)
。
所以我想ios1
要求一份工作,ios2
運行它並通知ios1
完成,最後ios2
運行處理程序。
ios2.post(
[&ios1, arg_ptr, callback, func]
{
bool result = func(arg_ptr);
ios1.post([]{ callback(result) });
});
此代碼是否可用?有沒有更聰明更簡單的方法?
編輯:
我發現ios1.post()
內第二LAMDA無法到達的函數指針callback
。它超出了範圍...所以我試圖用另一種方式使用boost::bind()
。
ios2.post(
[&ios1, arg_ptr, callback, func]
{
ios1.post( boost::bind(callback, func(arg_ptr)) );
});
我刪除了一個堆棧變量布爾,它似乎更好。
但是使用C++ 11 lambda和boost::bind
在一起看起來不太酷。
如何在沒有boost::bind
的情況下做到這一點?