簡體   English   中英

C ++ Boost.Asio-TCP套接字異步寫入

[英]C++ Boost.Asio - tcp socket asynchronous write

場景:

  1. 在對象A(線程A)內部,異步讀取和寫入boost :: asio :: ip :: tcp :: socket。

  2. 對象B(線程B)將數據發布到對象A的數據隊列中。

  3. 對象A應盡快將數據寫入其數據隊列中。

如何有效地達到第三點?

現在我正在這樣做:

  1. 隊列中可能沒有數據。

  2. socket-> async_send(數據,處理程序);

  3. 內部處理程序:回到第二點。

我擔心這種方法效率很低-大多數情況下,使用零長度數據調用async_send直到可以發送實際數據為止。

可能是更好的方法是在對象A內有一個附加線程,以便在發布新數據后立即在套接字上執行同步寫操作嗎? 從對象B的線程執行寫操作是毫無疑問的。

首先,除非您有充分的理由,否則我個人不會將其分解為每個對象1個線程。

相反,擁有一個共享的io_service (只需通過引用A和B io_serice.run()來傳遞它即可。然后在io_serice.run()上有一個線程。

假設其中一個對象也是async_reading,則無需編寫長度為0的基准並在處理程序中創建循環。 只需將async_write安排async_write時輸入數據。

對象A應該盡快將數據寫入其數據隊列中 ”可能被理解為等待C ++的未來,因此您檢查答案並確認boost :: asio :: example ,最后但並非最不重要的一點是,我認為有一些改進您的“ 數據隊列 ”中將要求您可以看看該答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM