设备浏览问题

时间:2010-01-21 13:22:52

标签: c++ windows winapi device shell32

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

现在我遇到了一些问题:

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

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

  3. 我想知道它取决于什么。设备文件系统?司机实施?还是其他什么?

1 个答案:

答案 0 :(得分:2)

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

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

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

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

  • 您的客户想要选择和使用 她设备上的一个文件,但是 哦不,唯一的IStream正在使用 在阅读缩略图的线程上。太 不好,必须等待那个线程 完成当前文件。