gpt4 book ai didi

c++ - 设备浏览问题

转载 作者:可可西里 更新时间:2023-11-01 10:30:25 27 4
gpt4 key购买 nike

我正在编写文件浏览软件,我希望它能在所有可移植设备(例如相机、智能手机等)上正常工作。我的程序显示缩略图,所以我需要读取每个文件的内容。

现在我面临一些问题:

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

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

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

最佳答案

这些似乎是对内存非常有限的外围设备的文件访问的非常合理的限制(有限的快速 volatile 内存和代码 EEPROM 比闪存卡的大小更令人担忧)。

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

因此,对于这些和其他不受支持的驱动程序功能,您可能必须有变通办法。

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

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

关于c++ - 设备浏览问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2109454/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com