![](/img/trans.png)
[英]Confused on boost::asio::io_context::run() and boost::thread::join()
[英]Beginning on boost::asio : Having problems using io_context
我一直在 c++ 中進行編碼,並想嘗試使用 boost asio 來創建 TCP 異步服務器。
我閱讀了 boost 提供的文檔,並使用 boost 1.75 嘗試編寫此服務器的代碼。
但是,我似乎不明白如何使用文檔中的 io_context 。
當我為第 3 天編譯代碼時:異步 TCP 日間服務器( 此鏈接在 boost 1.78 中但似乎與 1.75 沒有太大區別)我經常收到錯誤 io_context 由於它們的 inheritance 而無法復制execution_context,它繼承自noncopyable
。
所以我不明白如何編寫和編譯文檔代碼,因為它試圖在其中制作 io_context 的副本。
提前感謝您的任何回復。
編輯:我一直在編譯 C++ 17 上的代碼並使用柯南來管理升壓,我遇到的問題來自我嘗試將 io_context 復制到我的 class 的屬性的構造函數:
class Server {
public:
Server(boost::asio::io_context& io_context) : _io_context(io_context), _acceptor(io_context, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), 13))
{
startAccept();
}
~Server();
private:
void startAccept();
void handleAccept(ConnectionHandler::pointer new_connection, const boost::system::error_code &error);
boost::asio::io_context _io_context;
boost::asio::ip::tcp::acceptor _acceptor;
};
這是我在示例中遇到的編譯錯誤:
error: use of deleted function
‘boost::asio::io_context::io_context(const boost::asio::io_context&)’17 | Server(boost::asio::io_context& io_context) :
_io_context(io_context), _acceptor(io_context,
boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), 13))
/home/romsnouk/.conan/data/boost/1.75.0/_/_/package/634391908be52704fdd5c332658475fe91ab3b1d/include/boost/asio/io_context.hpp:639:3: note: declared here
639 | io_context(const io_context&) BOOST_ASIO_DELETED;
問題? 當您嘗試初始化_io_context
成員時,您復制了不可復制的io_context
object。
_io_context
成員需要是一個引用:
boost::asio::io_context& _io_context;
// ^
// Note ampersand, to make it a reference
這就是完整示例中所做的。
當然要確保原始io_context
object 的生命周期至少與您創建的Server
object 一樣長。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.