我有这样的代码:
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”。我该如何解决此问题?
答案 0 :(得分:0)
您的123胎面无限循环,使CPU一直忙碌。在GetAsyncKeyState调用之后进入睡眠状态:
std::this_thread::sleep_for(std::chrono::milliseconds(x));
睡眠时,您的进程不会消耗CPU资源。由于内核必须处理多个进程,因此可能会产生一些开销,但这并不重要。