SetTimer
API を使用して X 分ごとに関数を呼び出そうとしました。だから、私はこのテストコードを書いた
void f()
{
printf("Hello");
}
int main()
{
SetTimer(NULL, 0, 1000*60,(TIMERPROC) &f);
}
Hello を毎分書き込む必要がありますが、機能しません。
あなたのプログラムにはいくつかの問題があります:
main()
ため、タイマーが発生する時間はありません。WM_TIMER
Win32 タイマーは、どのウィンドウにも関連付けられていない場合でも、関数コールバックを提供する場合でも、メッセージを介して実装されるため、メッセージ ポンプ (以下を参照) が機能している必要があります。
TimerProc コールバック関数を指定すると、既定のウィンドウ プロシージャは、WM_TIMER を処理するときにコールバック関数を呼び出します。したがって、WM_TIMER を処理する代わりに TimerProc を使用する場合でも、呼び出しスレッドでメッセージをディスパッチする必要があります。
ソース: MSDN: SetTimer 関数
コールバック関数のプロトタイプが正しくありません。http://msdn.microsoft.com/en-us/library/windows/desktop/ms644907%28v=vs.85%29.aspxを参照してください。
void CALLBACK f(HWND hwnd, UINT uMsg, UINT timerId, DWORD dwTime)
{
printf("Hello");
}
int main()
{
MSG msg;
SetTimer(NULL, 0, 1000*60,(TIMERPROC) &f);
while(GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
(このサンプル プログラムは終了しないことに注意してください。代わりに、実際のプログラムには、 を送信して終了するための追加のロジックが必要ですWM_QUIT
)。