小编bja*_*nia的帖子

PeekMessage() 需要 1-2 毫秒来检索 WM_MOUSEMOVE 消息?

我在这里查看了许多关于 PeekMessage 和 WM_MOUSEMOVE 的帖子,但到目前为止我还没有发现任何与性能相关的内容。

长话短说; 我正在做 PC 游戏开发,昨天我注意到我可以将我们的应用程序从稳定的 500+ FPS(在菜单中)提升到个位数 FPS(低至 6),只需快速移动鼠标。

经过几个小时的挖掘和分析,我发现源是 PeekMessage()。不是针对该消息的 DispatchMessage(),只是一瞥。我测量了非常频繁地(每帧多次)以 1-2 毫秒的速度单独调用该函数。如果将其与快速鼠标移动相结合,则每渲染一帧消息队列可能会花费我 1000-2000 毫秒以上的时间。听起来很荒谬,但我实际上从 MS 下载了一个超级基本的 DirectX 示例,并在那里测试了相同的东西,结果相同。

整个示例太大而无法粘贴在这里,但如果您想尝试,请在以下位置下载示例:http : //code.msdn.microsoft.com/Direct3D-Tutorial-Win32-829979ef

并进行以下更改;

typedef unsigned __int64    QWORD;      // 64-bit unsigned.
DOUBLE GSecondsPerCycle;
void appInitTiming(void)
{
    LARGE_INTEGER Frequency;
    QueryPerformanceFrequency(&Frequency);
    GSecondsPerCycle = 1.0 / Frequency.QuadPart;
}

QWORD appCycles()
{
    LARGE_INTEGER Cycles;
    QueryPerformanceCounter(&Cycles);
    return Cycles.QuadPart;
}

int WINAPI wWinMain( _In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow )
{
    UNREFERENCED_PARAMETER( hPrevInstance );
    UNREFERENCED_PARAMETER( …
Run Code Online (Sandbox Code Playgroud)

windows directx

5
推荐指数
1
解决办法
804
查看次数

标签 统计

directx ×1

windows ×1