UWP getAsynckeystate()来自单独的线程
UWP GetAsyncKeyState() from a separate thread
我正在使用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
- CoInitialize()在单独的线程上崩溃而不返回
- 自 Windows 10 20H1 以来,具有单独线程的多个窗口停止工作
- 如何从单独的线程控制 SFML 窗口?
- 如何检索指向在单独线程上运行的函数的移动指针?
- 是否可以在单独的线程中将 QObject 设置为 QML 上下文属性?
- QT访问表小部件从单独的线程项目
- Qt - 在单独的线程中运行函数
- 如何在单独的线程上运行函数(如果线程可用)
- 多个boost io_service在单独的线程上用于多个网卡
- 在 Linux 中从单独的单线程进程生成多线程进程时出现问题
- 在单独的线程中使用参数启动成员函数
- 如何将数据写入 stdin,以便由等待来自 stdin 输入的单独线程使用?
- 从 Visual C++ 2010 中的单独线程调用消息框
- 将 std::cout 从单独线程中的 DLL 重定向到 QTextEdit
- OpenGL在屏幕外的单独线程与Qt 4.8
- 是否可以在 gsoap 中的单独线程中执行函数
- 在从基类构造函数创建的单独线程中调用纯虚函数
- 单独线程中的 GetDC 函数需要很长时间才能返回
- 使用QtConcurrent::run连接单独线程上的信号/插槽
- 单独线程中的两个窗口同时处于活动状态