2010-01-21 66 views
2

我正在寫文件瀏覽軟件,我希望它可以與所有便攜式設備(例如相機,智能手機等)正常工作。我的程序顯示縮略圖,所以我需要閱讀每個文件的內容。設備瀏覽問題

現在我面臨的一些問題:

  1. 與這兩個我的照片的相機,我可以從設備只能打開一個ISteam。對於每個額外的流,我都會收到ERROR_BUSY錯誤。這是不方便的,因爲我在幾個後臺線程中獲取縮略圖。

  2. 我可以從我的智能手機打開多個流,但我無法找到這些流!作爲解決方法,我必須將整個流複製到臨時文件系統位置並在那裏處理它。

我想知道它取決於什麼。設備文件系統?驅動程序實現還是其他什麼?

回答

2

這些似乎非常合理的文件訪問限制非常有限的內存(限制快速易失性存儲器和代碼EEPROM比閃存卡的大小更受關注)的外設訪問。

這不是文件系統(對於這些類型的設備幾乎普遍是FAT或FAT32),或者甚至是Windows驅動程序中的限制(儘管限制可能會強制執行以避免混淆設備),但文件描述符的數量有限在設備的嵌入式文件訪問代碼中。

因此,您可能必須爲這些和其他不受支持的驅動程序功能提供解決方法。

在相關說明中,多個線程通常不是執行後臺I/O操作的正確方法。如果您的設備支持OVERLAPPED操作,那麼您可以將它與事件和MsgWaitForMultipleObjects(它替換傳統的GetMessage/TranslateMessage/DispatchMessage主事件循環中的PeekMessage或GetMessage)一起使用。通過保持一個線程一切你避免同步問題,大多數競態條件,並防止以下問題:

  • 你的客戶要選擇和使用這些文件的 一個她的設備上,但 哦不,是唯一在線索閱讀縮略圖上使用IStream 。太 不好,不得不等待那個線程去 完成它的當前文件。