线程悬垂,高CPU,C ++

时间:2018-11-18 11:14:23

标签: c++ multithreading dll

我有这样的代码:

bool isActive = false;

DWORD WINAPI 123Thread(LPVOID);

DWORD WINAPI 123Thread(LPVOID)
{
    while (1) 
    {
        if (GetAsyncKeyState(VK_NUMPAD1))
        {
            MessageBox(0,L"1234456",L"6544321", MB_OK);
        }
    return 1;
    }
}

DWORD APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        CreateThread(NULL, NULL, 123Thread, NULL, NULL, NULL);
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return true;
}

一切正常,但是CPU初始化很高,并且在5-10分钟的工作后应用程序崩溃。在Proccess Explorer中,我的dll状态每次都是“正在运行”,周期数极高,但是其他类似的dll则显示状态如“等待” :WrUserRequest”。我该如何解决此问题?

1 个答案:

答案 0 :(得分:0)

您的123胎面无限循环,使CPU一直忙碌。在GetAsyncKeyState调用之后进入睡眠状态:

std::this_thread::sleep_for(std::chrono::milliseconds(x));   

睡眠时,您的进程不会消耗CPU资源。由于内核必须处理多个进程,因此可能会产生一些开销,但这并不重要。