我使用C++進行編碼,並且試圖異步加載圖像文件。經過一番研究,我發現了一些關於使用boost :: asio和boost :: iostreams來做到這一點的提及。然而,boost :: asio的文檔和示例大多與套接字相關,所以對我沒有多大幫助。需要關於使用boost :: asio和boost :: iostreams(或不同的東西)加載異步非阻塞文件的幫助:
這是我需要的。
- 負荷異步和負載完成後一個文件,執行的回調函數(在我的情況下,回調函數使用V8引擎執行JavaScript函數對象的JavaScript引擎)
- 回調函數必須在與主函數相同的線程中執行。 (因爲v8不是線程安全的。)
- 需要在linux和windows上工作。 (不同的實現都ok)
所以,這樣的事情將是非常好的:
async_read("test.jpg", &the_callback_function);
的功能不應該阻止,並在文件加載完成後,它應該運行「the_callback_function」。
編輯:正如joshperry指出的那樣,boost :: asio可能無法返回主線程。所以,我想我不必僅限於boost :: asio和boost:iostreams。任何可以幫助這個需求的c/C++庫都應該沒問題。謝謝!
當異步讀取完成後,您希望如何分派回主線程? – joshperry 2009-12-31 15:09:00
好吧......我不確定。我想到協同程序可能會完成這項工作。基本上,coroutine + non-blocking io應該在理論上工作。所以我想阿西奧可能不適合這個法案。 – 2009-12-31 15:14:47
回到主線程將會很困難。沒有好的方法來發信號通知未等待的線程。主線程在做什麼工作?它是否可以經常檢查並查看文件讀取是否完成? – Pace 2009-12-31 15:30:52