【问题标题】:How to read WPD MTP data stream asynchronously?如何异步读取 WPD MTP 数据流?
【发布时间】:2013-01-26 00:58:00
【问题描述】:

我的示例应用程序从 IPortableDeviceResources::GetStream() 函数中获取了一个 COM IStream 实例。我想使用这个 IStream 对象异步读取设备对象的内容。如何使用异步名字对象来做到这一点?

【问题讨论】:

    标签: winapi com wpd moniker


    【解决方案1】:

    IStream 在设计上是同步的。我首先要问一下你的情况是什么需要它是异步的。

    例如,如果想要异步数据流的原因是为了不阻塞 UI 线程,则可以在工作线程中执行 IStream 操作。

    如果原因是您可以发出多个并行读取,MTP 1.0 设备不支持此功能,因为在驱动程序级别,请求仍将在单个全局 MTP 会话中按顺序处理。 MTP 2.0 支持多会话,允许多个并行连接到同一设备,但到目前为止,没有多少设备采用这种方式。市场上的大多数(如果不是全部)MTP 设备都是 MTP 1.0。

    【讨论】:

    • 感谢您提供这些详细信息。我目前正在从工作线程上的 IStream 对象读取数据。我担心在慢速设备上读取大文件时工作线程会被垄断。如果我可以使用异步名字对象来读取 IStream 数据,那么我可以在需要时中止读取,并在操作系统将读取分派到底层 MTP 设备时让其他任务运行。但我不确定我是否可以在这里使用异步名字对象?
    • 通过 Windows WPD API 的 MTP 传输是在块中完成的,您从设备 IStream 读取,写入您的内存/文件,然后循环。每次读取后,在循环之前检查一个同步标志。
    猜你喜欢
    • 2021-03-08
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多