UWP getAsynckeystate()来自单独的线程

UWP GetAsyncKeyState() from a separate thread

本文关键字:单独 线程 getAsynckeystate UWP      更新时间:2023-10-16

我正在使用VS2015中的" DirectX 11和XAML App(Universal Window)"模板。我想在每一帧中获取用户的击键。因此,我试图将getAsynCkeyState()放入渲染环的内部。渲染环在单独的线程中运行:

auto workItemHandler = ref new WorkItemHandler([this](IAsyncAction ^ action)
{
    // Calculate the updated frame and render once per vertical blanking interval.
    while (action->Status == AsyncStatus::Started)
    {
        critical_section::scoped_lock lock(m_criticalSection);
        Update();
        m_sceneRenderer->OnKeyDown();
        if (Render())
        {
            m_deviceResources->Present();
        }
    }
});
// Run task on a dedicated high priority background thread.
m_renderLoopWorker = ThreadPool::RunAsync(workItemHandler, WorkItemPriority::High, WorkItemOptions::TimeSliced);

m_scenerenderer-> onkeydown()是我放置getAsynckeystate()的位置。但是,每当我将m_scenerenderer-> onkeydown()放入时循环中时,所有DirectX内容都不会呈现。另外,M_Renderloopworker将是nullptr并在我关闭应用程序时抛出异常。

// Sample3DSceneRenderer.h, truncated
namespace UWP_DX11_XAML_
{
    class Sample3DSceneRenderer
    {
        Sample3DSceneRenderer(Windows::UI::Core::CoreWindow^ window);
        void OnKeyDown();
        Platform::Agile<Windows::UI::Core::CoreWindow^> m_window;
    }
}

// Sample3DSceneRenderer.cpp, truncated
UWP_DX11_XAML_::Sample3DSceneRenderer::Sample3DSceneRenderer(
        Windows::UI::Core::CoreWindow^ window):
m_window(window)
{
}
void UWP_DX11_XAML_::Sample3DSceneRenderer::OnKeyDown()
{
     m_window.Get()->GetAsyncKeyState(Windows::System::VirtualKey::Control);
}

调用M_Window的其他成员功能可能会导致相同的问题。

您可能希望使用createCoreDepententEnputSource设置专用输入线程(coreinputDeviceTypes ::鼠标| coreinputDeviceTypes :: touch | corecorInputDeviceTypes :: corecorInputDeviceTypes :: pen)

这里有一个示例演示此选项:https://github.com/microsoft/windows-universal-samples/tree/master/master/samples/lowlatencyinput

我还发现了这些类似的文章,这些文章讨论了针对低输入延迟的优化。

https://learn.microsoft.com/en-us/windows/uwp/gaming/optimize-performance-performance-for-windows-windows-direct3d-11-apps-with-coredispatcher

https://blogs.windows.com/buildingapps/2013/12/18/optimizing-directx-apps-for-low-low-low-low-low-low-nput-input-input-inp----n-long-----------jpghhjxxexexexexexexexexexexexexexexexexexbysmtf7.97