0

wxFrameのwxGLCanvasに接続されているwxTimerが1つ(場合によっては複数)あります。タイマーは、キャンバスの再描画をトリガーできます。

主な問題は削除です。フレームが閉じると、当然、フレームとそのキャンバスが停止します。タイマーの描画が行われている間、ウィンドウが閉じているようです。draw-method-in-progressは、もう存在しないオブジェクトを操作しているため、問題が発生します。

問題が発生するのはたまにしかなく、この評価をさらにサポートします。キャンバスのデストラクタ(サブクラス化中)で、削除する前にtimer-> Stop()を呼び出します。これは役に立たないようです-おそらくタイミングイベントが発行されたばかりである可能性があるためですか?

私の質問は、これを防ぐ方法です。破棄する前にタイマーイベントの繰り返しを停止する正しい方法は何ですか?

4

2 に答える 2

0

私の推測では、タイマーが起動した後、描画が完了する前にフレームが閉じます。タイマーが起動したときに設定され、描画が完了したときにのみクリアされるフラグを追加することをお勧めします。フレームクローズコードはこのフラグをチェックし、クリアされている場合にのみ続行する必要があります。

于 2012-09-14T13:58:15.703 に答える
0

イベントがタイマーの期限切れを処理するために使用されている場合、これが発生することは非常に疑わしいと思われます。これは、フレームが実際に破棄されるのは、保留中のイベントがなくなった場合のみであるためです。これが、wxWidgets が最初に遅延破棄を使用する主な理由の 1 つです。

「呼び出しますDestroy()」が「削除します」という意味である場合、これがどのように発生するのか本当にわかりません。いつものように、簡単な例で問題を再現してhttp:/に送信してみてください。 /trac.wxwidgets.org/ . 直接行う場合はdelete frame、これを行わないでください。

于 2012-09-14T22:28:45.750 に答える