如何編寫一個程序沒有窗口,沒有窗口類,沒有CPU消耗while循環,沒有控制檯尚未使用消耗循環將消耗更少中央處理器?win32無窗口應用程序使用定時器使用消息循環,而不使用CPU消耗while循環
我在下面解釋我的要求。
我正在寫一個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 ...或事件對象,當且僅當這些可能會消耗更多的資源,只是隱藏窗口,然後請指定,也因此我會去簡單的方法...
據工作
我真的不知道它是如何工作的原因,我讀的人表示將不會運行。 我在網上搜索更多的信息,它一直在努力...... 我不知道。
可以嗎?這是一種合適的方式嗎?困惑。
聽起來像也許這應該是一個服務,而不是一個應用程序? – cbranch
我在做什麼是系統不應該閒置(使用編程,而不是從控制面板中刪除空閒),所以在每30個空閒秒鐘後,計時器調用一個函數,該函數將使用kbd事件來按下一個鍵。有些事情是這樣的......除此之外,學習如何編寫服務也是很好的......我也會嘗試。 –
-1返回值的可能性意味着此類代碼可能會導致致命的應用程序錯誤。相反,請在MSDN上檢查GetMessage: http://msdn.microsoft.com/en-us/library/windows/desktop/ms644936.aspx –