2
我有下面的類定義:升壓:ASIO :: ASYNC_WRITE:數據發送,但處理不叫
// SocketTypeT may be e.g. 'boost::asio::ip::tcp::socket'
template<class SocketTypeT>
class Socket : public SocketTypeT, public boost::enable_shared_from_this< Socket<SocketTypeT> > {
[...]
在這一類,我有以下方法 'writeAsync':
void writeAsync(const std::string& strData) {
boost::asio::async_write(*this, boost::asio::buffer(strData),
boost::bind(&Socket::handle_write_async,
shared_from_this(),
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
}
而且最後在 'writeAsync' 所使用的處理程序(也是一類的成員函數):
void handle_write_async(const boost::system::error_code& ec, std::size_t cntBytesSent) {
cout << "handle_write_async" << endl;
if (m_pSocketAsyncObserver) {
m_pSocketAsyncObserver->handleAsyncWrite(connectionClosed, cntBytesSent, ec);
}
}
Proble m:
數據已成功傳輸到服務器,但'handle_write_async'從未被調用過。這可能是什麼原因?
該代碼表面看起來不錯 - 你在'io_service'上調用'run()'嗎? – Nim
調用run()失蹤。但即使調用運行,結果也是一樣的。呼叫順序是否有關,例如在使用'io_service'對象初始化'boost :: asio :: ip :: tcp :: socket'之前,我必須調用run嗎? – Anonymous
'io_service :: run()'是派遣所有異步操作所必需的。通常你可以設置所有東西(套接字,連接等),然後調用運行(因爲它是一個阻塞操作 - 除非你在另一個線程中執行)。 – Nim