0

私はタイマークラスを持っています..このタイマーは私のコードブロックのさまざまな部分から開始されます..このタイマーを管理する別のクラス、つまりCTimerManagerがあります...これは静的クラスです..ここで直面する問題は、アプリケーションの初期化を解除すると、タイマーに必要なものがすべて破棄されます...しかし、最初のタイマーがオフになると多くのタイマーを開始したため、メモリがNULLになり、他のタイマーがアクティブで、メモリにアクセスしようとすると、例外が発生します( CTimerManagerの一重項インスタンス)...誰もがこの問題に直面する方法についての考えを持っています

4

2 に答える 2

0

クラスのファクトリメソッドを介してのみタイマーインスタンスを作成しますCTimerManager。これらのタイマーは本質的にマネージャーにバインドされており、マネージャーに属しているため、マネージャーのみが作成と削除の責任を負う必要があります。

マネージャークラスのデストラクタでは、すべてのタイマーを停止して削除する必要があります。そうすれば、マネージャーが破棄された後は、タイマーが有効またはアクティブのままになることはありません。

于 2012-06-19T14:50:07.737 に答える
0

説明から、指定された時間が経過した後に自分自身にコールバックするタイマーを保持するクラスを作成しています。マネージャを破棄すると、タイマーデータ構造がなくなり、タイマーがコールバックしてオブジェクトが破棄されます。

CTimerManagerのデストラクタを呼び出すときは、必ずすべてのタイマーをオフにする必要があります。

スレッドを使用してからsleepを呼び出していますか?その場合、各タイマーは定期的にフラグをチェックして、タイマーが早期に終了しているかどうかを確認する必要があります。次に、デストラクタでフラグを設定してタイマーを早期に終了し、すべてのタイマースレッドをjoin()します。

オペレーティングシステムのタイマーコールバックを呼び出している場合は、タイマーをキャンセルする機能がある可能性があります。

于 2012-06-19T16:25:28.190 に答える