私はタイマークラスを持っています..このタイマーは私のコードブロックのさまざまな部分から開始されます..このタイマーを管理する別のクラス、つまりCTimerManagerがあります...これは静的クラスです..ここで直面する問題は、アプリケーションの初期化を解除すると、タイマーに必要なものがすべて破棄されます...しかし、最初のタイマーがオフになると多くのタイマーを開始したため、メモリがNULLになり、他のタイマーがアクティブで、メモリにアクセスしようとすると、例外が発生します( CTimerManagerの一重項インスタンス)...誰もがこの問題に直面する方法についての考えを持っています
2 に答える
クラスのファクトリメソッドを介してのみタイマーインスタンスを作成しますCTimerManager
。これらのタイマーは本質的にマネージャーにバインドされており、マネージャーに属しているため、マネージャーのみが作成と削除の責任を負う必要があります。
マネージャークラスのデストラクタでは、すべてのタイマーを停止して削除する必要があります。そうすれば、マネージャーが破棄された後は、タイマーが有効またはアクティブのままになることはありません。
説明から、指定された時間が経過した後に自分自身にコールバックするタイマーを保持するクラスを作成しています。マネージャを破棄すると、タイマーデータ構造がなくなり、タイマーがコールバックしてオブジェクトが破棄されます。
CTimerManagerのデストラクタを呼び出すときは、必ずすべてのタイマーをオフにする必要があります。
スレッドを使用してからsleepを呼び出していますか?その場合、各タイマーは定期的にフラグをチェックして、タイマーが早期に終了しているかどうかを確認する必要があります。次に、デストラクタでフラグを設定してタイマーを早期に終了し、すべてのタイマースレッドをjoin()します。
オペレーティングシステムのタイマーコールバックを呼び出している場合は、タイマーをキャンセルする機能がある可能性があります。