在試圖建立一個程序,它可以傳輸與提升async_write
數據塊/陣列,我大概遇到了我的線程的麻煩:如何使用boosts io_service.post()來執行函數並使用數組或指針作爲參數?
這是我想執行什麼:
write(unsigned char *pMsg, unsigned short nMsgLen){
io_service_.post(boost::bind(&m_client::write_buf, this, pMsg, nMsgLen));
}
write_buf(unsigned char *pMsg, unsigned short nMsgLen){
boost::asio::async_write(target,
boost::asio::buffer(pMsg, nMsgLen),
boost::bind(&m_client::write_buf_compl,
this,
boost::asio::placeholders::error));
}
它編譯,但pMsg
沒有正確的內容,當write_buf
被調用時,我認爲這是因爲它被調用不在同一個線程內。
那麼,我怎麼能調整這個構造來傳遞我的數組作爲參數?!
您必須確保在write_buf()被調用時,由'pMsg'指向的緩衝區將保持活動狀態。換句話說,如果該緩衝區對write()的調用者是本地的,那麼如果該函數將退出(並且變量持有緩衝區超出範圍),則會遇到麻煩。 – zaufi
爲什麼這個問題被標記爲boost-thread? –