如何编写一个没有窗口、没有窗口类、没有 cpu 消耗 while 循环、还没有控制台使用会消耗更少 cpu 的消息循环的程序?
我在下面解释我的要求。
我正在编写一个使用计时器且不需要窗口的 win32 api 程序。
根据手册,默认消息循环仅在有与之关联的窗口时运行。
我浏览了其他 stackoverflow 内容,其中明确指出要防止 while 循环和睡眠功能会导致 CPU 负载过大。
我想像没有窗口的后台程序一样运行这个程序。
我使用回调函数作为 setTimer 函数的最后一个参数,所以我不必有窗口过程。
我听说在默认消息循环中使用的事件/对象将保持程序运行但不会使 cpu 过载。这是唯一的方法吗?但我不知道如何使用这个选项。
在不消耗 CPU 和其他资源的情况下编写此类应用程序的所有可能方法是什么?
您的建议和参考确实会有所帮助。
这是我现在拥有的代码,它将退出,因为正如其他讨论所述,没有关联任何窗口。
#include <windows.h>
void getidle();
int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil)
{
SetTimer(NULL, 1, 5000, (TIMERPROC) getidle);
MSG msg;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
void getidle()
{
//some code here
}
所以我需要使用不同类型的消息循环,我不知道如何使用它。类似 MsgWaitForMultipleObjects 或 WaitForSingleObject 的东西。? .
此外,通过执行上面提到的方式,如 msgwait...waitforsigle... 或事件对象,当且仅当这些可以消耗更多仅隐藏窗口的资源时,请指定这也是因为我将采用这种简单的方式...
这是工作
我真的很想知道它是如何工作的,因为我读到人们说它不会运行。我在网上搜索更多信息,它一直在工作......我不知道。
可以吗?这是正确的方法吗?使困惑。