2013-04-26 102 views
1

這個問題與我以前的另一個問題有關。boost asio異步寫入處理函數自己調用

完成寫入操作時寫入的boost :: asio :: async_write處理函數本身可能會導致寫操作問題?

例如

void on_write(const boost::system::error_code & error_code){ 
    if (! error_code){ 
    std::string some_data_to_transfer("hello world"); 
    std::vector<char> vec_buf(some_data_to_transfer.begin(),some_data_to_transfer.end()); 
    boost::asio::async_write(this->socket,boost::asio::buffer(vec_buf), 
    boost::asio::transfer_exactly(vec_buf.size()), 
    boost::bind(&Server::on_write,this->shared_from_this(), 
    boost::asio::placeholders::error)); 
    } 
} 

回答

4

不,這不會造成任何問題。事實上,這樣做有很多理由。示例是一個基於TCP的文件服務器,在文件的每個部分都被傳輸時,您將讀取文件的下一部分並將其寫入網絡。

有一點需要注意:你有未定義的行爲,因爲你正在使用的緩衝區(vec_buf)在調用完成之前被破壞。通常,你會使vec_buf成爲有問題的類的成員。

相關問題