【问题标题】:Waiting for vertical blank in kernel mode?在内核模式下等​​待垂直空白?
【发布时间】:2012-06-24 19:19:06
【问题描述】:

我正在编写一个需要与垂直空白中断同步的驱动程序,以通过 USB 管道发送一些数据。

在用户模式下,有可用的 Direct X 函数,如 IDXGIOutput::WaitForVBlank 和一些较旧的函数。我无法从内核中使用它们。 我在 Windows 8 SDK 中找到了另一个接口:D3DKMTWaitForVerticalBlankEvent,它甚至有一个内核头文件(头文件位于 SDK 的 /km/ 文件夹中),但它需要 gdi32.lib,这是一个用户模式库并与之链接会削弱司机。

有什么方法可以等待或收到有关垂直空白出现的通知(无需轮询)?

【问题讨论】:

    标签: windows kernel interrupt wdf kmdf


    【解决方案1】:

    在您的驱动程序中包含用户模式部分是否可以接受?您可以在用户模式下拥有一个等待 VBI 的辅助进程,并让该进程以某种方式触发您的 KM 驱动程序。

    【讨论】:

    • 我现在就是这样做的;虽然我想摆脱将 IOCTLS 发送到驱动程序的开销。我需要我能得到的每一微秒。
    【解决方案2】:

    您可以使用命名事件。

    • 在您的驱动程序中创建一个命名事件和一个内核线程,以便在执行实际工作之前等待该事件。
    • 在用户模式助手应用程序/服务中打开命名事件并创建一个线程来调用 IDXGIOutput::WaitForVBlank 然后立即设置命名事件。

    当然我想你很久以前就解决了这个问题并继续前进......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-19
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      • 2012-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多