нить гунги, высокий процессор, с ++ - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть такой код:

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;
}

все работает нормально, но инициализация процессора очень высока, и приложение вылетает через 5-10 минут работы. В Proccess Explorer мое состояние dll каждый раз "работает"с очень большим количеством циклов, но другие, подобные dll, показывают состояние, как "Wait: WrUserRequest". Как я могу решить эту проблему?

1 Ответ

0 голосов
/ 18 ноября 2018

Ваш 123 протектор бесконечно зацикливается, сохраняя занятость процессора все время.Переведите в спящий режим после вызова GetAsyncKeyState:

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

Во время сна ваш процесс не будет расходовать ресурсы ЦП.Могут быть некоторые издержки, поскольку ядру приходится жонглировать процессами, но это очень незначительно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...