- ベストアンサー
Visual Studioのタイマ処理を使って描画を行うプログラムの異常終了について
- Visual Studioのタイマ処理を使って描画を行うプログラムを作成したが、計測時間が100秒を超えると異常終了してしまう。
- センサからのデータを50Hzでサンプリングし、描画を行う予定だが、異常終了してしまうため、解決策を教えてほしい。
- プログラムの開発環境はWindows XP SP2でVC++6.0を使用している。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> CDC* pDC=m_pict.GetDC(); これに対する ReleaseDC() が見当たりませんが、きちんと解放していますか? デバイスコンテキストは不要になった時点で必ず解放してください。 m_pict.ReleaseDC(pDC);
その他の回答 (2)
- magicalpass
- ベストアンサー率58% (378/648)
SetTimerのタイムアウト値が12msなので、 100秒経てば変数 i の値は 8333 になり、 配列のサイズ8000を超えてしまいます。 //なぜか12にするとちょうど50Hzでサンプリングする とありますが、この50Hzというのは果たして タイムアウト処理が起動された回数でしょうか? 試しにタイムアウト処理の中に if (i == 7999) { i = 0; // ブレークポイント設定場所(処理はダミー) } とか書き加えて、Debugモードでブレークポイントに止まるかどうか 確認してみてください。
補足
回答ありがとうございます >試しにタイムアウト処理の中に if (i == 7999) { i = 0; // ブレークポイント設定場所(処理はダミー) } とか書き加えて、Debugモードでブレークポイントに止まるかどうか 確認してみてください。 確認してみたところブレークポイントには止まりませんでした. 実際に90秒計測してみたところ,iの値は4500とります. タイマが遅れているのか,SetTimerのタイムアウト値を12にすると ちょうど実時間と同じように時間を刻みます. 計測時間は m_time=(double)i/50; UpdateData(FALSE); で確認しています. 実際の計測は計測時間を90秒としています. 一回目の計測では問題なく計測できるのですが,二回目の計測では5秒ぐらい計測した あたりで異常終了しています. 描画をコメントアウトすると二回目,三回目と問題なく計測できます. コメントアウトした場合,一回目の計測ではメモリの使用量は増加しますが, 二回目,三回目では増加しません.これは一回目に使用した変数や配列を使用したためだと思います. しかし,描画した場合では二回目でもメモリの使用量は増加します. これが何かの原因の一部ではないのでしょうか? 何か解決策があれば願いします.
- magicalpass
- ベストアンサー率58% (378/648)
変数 i の宣言と 配列 L3_x、L3_y、O7_x、O7_y の宣言を見直してください。 i の値が配列より大きくなるとバッファがあふれます。
補足
回答ありがとうございます. 変数iと配列L3_x,L3_y,C7_x,C7_yの宣言は int i=0; double C7_x[8000]; double C7_y[8000]; double L3_x[8000]; double L3_y[8000]; と,宣言しています. 描画するところをコメントアウトすると問題はありませんでした. 描画するとメモリの使用量がやけに多いのでそれが原因でしょうか?
お礼
プログラムを修正して試したところ成功しました. 本当に困っていたので助かりました. ありがとうございました.