私は自分のコードに問題があり、数時間後、私はそれを把握するように見えることはできません...は削除できないWM_TIMERメッセージ
問題:私はへの接続を試行しようとしていますサーバーを10秒ごとに起動します。タイマーが最初に経過すると、コールバック関数はちょうどいいと呼ばれますが、すぐに(10秒待たずに)再び呼び出され、タイマーメッセージが取り除かれないかのように何度も繰り返し呼び出され続けます待ち行列。誰も助けることができますか?
タイマーがここで設定されています
SConnect::SConnect()
{
hSimConnect = NULL;
Attempt();
SetTimer(hMainWindow, reinterpret_cast<UINT_PTR>(this), 10000, (TIMERPROC)TimerProc);
}
(のみ)アプリケーションのメッセージループはここにある:
while (true)
{
PeekMessage(&msg, NULL, 0, 0, PM_REMOVE);
if (msg.message == WM_QUIT)
break;
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
//UPDATES
pSCObj->Update();
manager.Update();
Sleep(50);
}
とタイマコールバック関数はここにある:
void CALLBACK SConnect::TimerProc(HWND hWnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime){
SConnect *pSC = reinterpret_cast<SConnect *>(idEvent);
MSG wMsg;
if (!pSC->connected)
pSC->Attempt();
else{
pSC->connected = false;
}
}
I本当に助けていただきありがとうございます...詳細情報が必要な場合はお知らせください...
あなたが不要になった敬具、 ファーリー
これらのタイマは周期的である:のPeekMessage()がtrueの修正に問題を返すときにだけメッセージを派遣
。あなたはそれらを止めるために 'KillTimer()'を呼び出す必要があります。 –
ああ申し訳ありませんが、私の質問は不明でした。私はコールバックが何度も繰り返し呼び出されていることを意味しました。(10秒ごとではありません) – lequinne
[mcve]を入力してください。混乱の恐れはありません –