我正在编写文件浏览软件,我希望它能够与所有便携式设备(如相机,智能手机等)正常配合使用。我的程序显示缩略图,所以我需要阅读每个文件的内容。
现在我遇到了一些问题:
使用我的照相机,我只能从设备打开一个ISteam。对于每个额外的流,我都会收到ERROR_BUSY错误。这很不方便,因为我在几个后台线程中获得了缩略图。
我可以从智能手机中打开多个流,但我无法寻找那些流!作为解决方法,我必须将整个流复制到临时文件系统位置并在那里进行处理。
我想知道它取决于什么。设备文件系统?司机实施?还是其他什么?
答案 0 :(得分:2)
对于内存非常有限的外设的文件访问似乎是非常合理的限制(有限的快速易失性存储器和代码EEPROM比闪存卡的大小更受关注)。
这不是文件系统(对于这些类型的设备几乎普遍是FAT或FAT32),甚至是Windows驱动程序中的限制(尽管可能会强制执行限制以避免混淆设备)但文件描述符的数量有限设备的嵌入式文件访问代码。
因此,您可能必须为这些和其他不受支持的驱动程序功能提供变通方法。
在相关的说明中,多个线程通常不是执行后台I / O操作的正确方法。如果您的设备支持OVERLAPPED操作,那么您可以将其与事件和MsgWaitForMultipleObjects(在经典GetMessage / TranslateMessage / DispatchMessage主事件循环中替换PeekMessage或GetMessage)一起使用。通过将所有内容保留在一个线程上,可以避免同步问题,大多数竞争条件,并防止出现以下问题: