2009-07-24 20 views
6

は私がのSetTimer APIを使用して、私はこのようなコードの多くを参照してください。KillTimerは必要ですか?

case WM_DESTROY: 
    // Destroy the timer. 
    KillTimer(hwnd, IDT_TIMER); 
    PostQuitMessage(0); 
    break; 

私は、プロセスの終了時にKillTimerまたはシステムは自動的に空きリソースを呼び出す必要がありますか? KillTimerを呼び出すのを忘れると、リソースが漏れますか?

私はタイマーが必要ない場合、KillTimerによって破壊される可能性があることを理解します。しかし、それは手動で破壊する必要がありますか?

+0

は、私はいくつかの研究をしたと判明しました:Wnen窓が破壊されているクリーンアップ・ルーチンは、(xxxFreeWindow呼び出しからDestroyWindowsTimers)が呼び出されます。 –

答えて

7

HWNDから設定されたタイマーは、破棄されるウィンドウ(hwnd)によって暗黙的に破棄されます。そうではありません。ウィンドウが終了したらタイマーをクリーンアップする必要はありません。

しかし、ウィンドウに関連するすべてのリソースをウィンドウのクローズ時にクリーンアップすることをお勧めします。

4

タイマーは、プロセス終了時にWindowsによって自動的に破棄されます。

しかし、あなたのタイマーはプロセスにではなくウィンドウに属していることに注意してください。したがって、アプリケーションでこれらのウィンドウを作成してプロセス内で破棄できるようにすると、タイマーが漏れることになります。

明示的に明示的にクリーンアップするのは良い方法です。そうしないと、後でクリーンアップの不足が戻ってくることがあります。

+0

私は、ウィンドウが破壊されたときにタイマーが漏れると言うのは間違いだとは思わない。たぶん古いWindows 95/98の日に、タイマーがリークする可能性があります。しかし、間違いなくXPとそれ以降、hwndsに設定されたタイマーは、ウィンドウが破棄されたときにクリーンアップされます。 – selbie

+2

@selbie:はい、あなたが正しいと確信しています。しかし、私はまだあなたが明示的にそれらをきれいにしない限り、物事が漏れると仮定することは良い習慣であると言います。ウィンドウベースのタイマーからコールバックベースのタイマーに変更した場合、明示的に殺すまで漏れが発生します。 – RichieHindle

0

MSDNによると、1はタイマーを殺す必要があります。

アプリケーションが はもはや必要でタイマーを破壊するKillTimer関数を使用する必要があります。次の例では、定数IDT_TIMER1、IDT_TIMER2、およびIDT_TIMER3によって識別されるタイマー を破棄します。

//タイマーを破棄します。
KillTimer(hwnd、IDT_TIMER1);
KillTimer(hwnd、IDT_TIMER2);
KillTimer(hwnd、IDT_TIMER3);

https://msdn.microsoft.com/en-us/library/windows/desktop/ms644901(v=vs.85).aspx#creating_timer

+0

はい、しかし、あなたのタイマーがウィンドウと同じ寿命を持っているなら、あなたは 'KillTimer'を省略することができます。 –

関連する問題