1
我有一個std::iostream
對象(例如fstream
),我想用boost::asio
使用異步操作。那可能嗎?我知道asio不支持文件操作,但有時非常有用地處理文件IO。我可以使用特定於平臺的本地文件描述符,然後將它們與asio一起使用,但我認爲使用標準C++流將在C++中更加優雅,並且更加便攜。有沒有辦法使用boost :: asio使用std :: iostream對象?
我有一個std::iostream
對象(例如fstream
),我想用boost::asio
使用異步操作。那可能嗎?我知道asio不支持文件操作,但有時非常有用地處理文件IO。我可以使用特定於平臺的本地文件描述符,然後將它們與asio一起使用,但我認爲使用標準C++流將在C++中更加優雅,並且更加便攜。有沒有辦法使用boost :: asio使用std :: iostream對象?
雖然Boost.Asio的不支持的文件操作,它爲以異步方式執行文件操作的應用程序提供的工具集。完成此操作的常用方法是使用Boost.Asio創建一個線程池。應用程序會將文件操作發佈到線程池中,並立即返回。然後線程池將同步執行操作,並在完成時調用或發佈完成處理程序。
有幾點考慮:
io_service
。最後,libuv是一個C庫,提供同步和異步文件操作。它可以作爲一個有價值的基礎實施或參考材料。
由於快速異步IO機制往往是相當低層次的平臺特定,我認爲標準庫流太抽象,不適合您的需求。我相當肯定你在這個特定的例子中運氣不好。如果boost沒有提供某種異步流,那麼您必須爲此尋找另一個第三方庫。 – Rook
哪個平臺? –
'boost :: asio'不是一個通用的異步I/O庫,它直接針對的是非平凡的支持select或類似系統調用的長延遲流。對於具有磁盤文件的異步I/O,需要完全不同的API。 –