ウィンドウなし、ウィンドウ クラスなし、while ループの CPU 消費なし、CPU 消費量が少ないメッセージ ループを使用するコンソールなしのプログラムを作成する方法は?
以下に私の要件を説明しています。
タイマーを使用し、ウィンドウを必要としない win32 API プログラムを作成しています。
マニュアルによると、デフォルトのメッセージループは、ウィンドウが関連付けられている場合にのみ実行されます。
CPUに過度の負荷をかけるwhileループとスリープ機能を防ぐように明確に述べている他のstackoverflowコンテンツを調べました。
このプログラムをウィンドウなしでバックグラウンド プログラムのように実行したい。
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... またはイベントオブジェクトのような上記の方法を実行することにより、これらがウィンドウを非表示にするだけでより多くのリソースを消費する可能性がある場合にのみ、その単純な方法で行くことも指定してください...
それは働いています
実行されないと言っている人を読んだので、それがどのように機能するのか本当に疑問に思っています。私はネットで詳細情報を検索していましたが、それは機能していました...わかりません。
大丈夫ですか?それは適切な方法ですか?混乱している。