2010-01-21 94 views
2

我正在写文件浏览软件,我希望它可以与所有便携式设备(例如相机,智能手机等)正常工作。我的程序显示缩略图,所以我需要阅读每个文件的内容。设备浏览问题

现在我面临的一些问题:

  1. 与这两个我的照片的相机,我可以从设备只能打开一个ISteam。对于每个额外的流,我都会收到ERROR_BUSY错误。这是不方便的,因为我在几个后台线程中获取缩略图。

  2. 我可以从我的智能手机打开多个流,但我无法找到这些流!作为解决方法,我必须将整个流复制到临时文件系统位置并在那里处理它。

我想知道它取决于什么。设备文件系统?驱动程序实现还是其他什么?

回答

2

这些似乎非常合理的文件访问限制非常有限的内存(限制快速易失性存储器和代码EEPROM比闪存卡的大小更受关注)的外设访问。

这不是文件系统(对于这些类型的设备几乎普遍是FAT或FAT32),或者甚至是Windows驱动程序中的限制(尽管限制可能会强制执行以避免混淆设备),但文件描述符的数量有限在设备的嵌入式文件访问代码中。

因此,您可能必须为这些和其他不受支持的驱动程序功能提供解决方法。

在相关说明中,多个线程通常不是执行后台I/O操作的正确方法。如果您的设备支持OVERLAPPED操作,那么您可以将它与事件和MsgWaitForMultipleObjects(它替换传统的GetMessage/TranslateMessage/DispatchMessage主事件循环中的PeekMessage或GetMessage)一起使用。通过保持一个线程一切你避免同步问题,大多数竞态条件,并防止以下问题:

  • 你的客户要选择和使用这些文件的 一个她的设备上,但 哦不,是唯一在线索阅读缩略图上使用IStream 。太 不好,不得不等待那个线程去 完成它的当前文件。