現在、VC++2010 MFCでアプリケーションを作成しています。
そこで質問なんですが、
エディットボックスに値(今回はADボードからサンプリングした電圧値)をSetWindowTextや、UpdateData(FALSE);をつかってエディット表示などをしたんですが、これを毎秒表示しようとすると(SetTimer()で毎秒、ADボードで電圧値をサンプリングしエディットボックスに表示)7分後くらいにパソコンがフリーズしてしまいます。どのようにしたらフリーズされないか
よろしくお願いします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
MSDNに「CreatePointFont 関数を使って作成された CFont オブジェクトを使い終わったら、最初にデバイス コンテキストからフォントを選択して、それから、CFont オブジェクトを削除します。
」と書いてありますので、CreatePointFont関数で作成したフォントの使用後、次のCreatePointFont関数を使用する前にオブジェクトを削除する必要があるのでは。フォントを作成し続けて削除しないため、GDIリソースが足りなくなっていると思われます。
No.3
- 回答日時:
コードを出したらいかが?って言ってるんだけど。
> ADボードだけならフリーズはしませんでした。
そこまで分かったのなら、表示処理がおかしいと思われるけど、ソースコードが無いんじゃ非常に効率が悪い。
とりあえずタイマから呼び出される関数の中身が見たい。
多分 #2のいう通り資源管理の問題と思われるが、ソースがないんじゃぁね。。。.
この回答への補足
御回答ありがとうございます。
以下がコードとなっております。
ヘッダー部で、CFont* m_pFont;宣言し、
コンストラクタでm_pFont = new CFont;を行っております。
デストラクタでDeleteObject(m_pFont);を行っています。
OnInitDialog()部で、以下の処理をしています。
m_pFont->CreatePointFont(200,"");
((CButton *)GetDlgItem(ID_BTN_START ))->SetFont(m_pFont);
((CButton *)GetDlgItem(ID_BTN_STOP ))->SetFont(m_pFont);
((CButton *)GetDlgItem(ID_BTN_NOIZERE))->SetFont(m_pFont);
((CButton *)GetDlgItem(ID_BTN_END ))->SetFont(m_pFont);
((CButton *)GetDlgItem(ID_BTN_RESET ))->SetFont(m_pFont);
m_pFont->CreatePointFont(140,"");
((CEdit *)GetDlgItem(IDC_EDIT1))->SetFont(m_pFont);
((CEdit *)GetDlgItem(IDC_EDIT2))->SetFont(m_pFont);
((CEdit *)GetDlgItem(IDC_EDIT3))->SetFont(m_pFont);
((CEdit *)GetDlgItem(IDC_EDIT4))->SetFont(m_pFont);
((CEdit *)GetDlgItem(IDC_EDIT5))->SetFont(m_pFont);
((CEdit *)GetDlgItem(IDC_EDIT6))->SetFont(m_pFont);
後はSetTimer(1,1000,NULL)を行い、毎秒以下の処理を行っています。
void OnTimer(UINT_PTR nIDEvent)
{
m_pADControl->AD_In_Out(AD1,AD2,AD3,AD4,AD5,AD6);
UpdateData(TRUE);
m_xvEditVolt[0] = AD1;
m_xvEditVolt[1] = AD2;
m_xvEditVolt[2] = AD3;
m_xvEditVolt[3] = AD4;
m_xvEditVolt[4] = AD5;
m_xvEditVolt[5] = AD6;
UpdateData(FALSE)
}
以上の処理を行うと、タスクマネージャなどで調べるとGDIオブジェクトが増加し続け、9999になると
フリーズしてしまいます。
ではどのようにしたらGDIオブジェクトが増加し続けないか教えてもらったら幸いです。
よろしくお願いします。
No.1
- 回答日時:
これだけの情報で一発で正答にたどり着くのは無理だと思う。
まず、問題点の切り分けが大事(デバッグの基本)。再現性が高いのなら、原因にたどり着くことは可能と思う。
多分、この処理はいくつかの処理に分割されていると思うが、それぞれコメントアウトしていってフリーズしなくなったら、その部分は原因である可能性が高い。ただし、問題がいくつかの処理の相互作用によるものだとしたら、これだけでは原因にたどり着くことは困難。
ADボードのサンプリング処理を実行せず(ダミーの値を返すようにしておく)、エディットボックスを毎秒表示したらどうなりますか?
ADボードのサンプリング処理を毎秒実行し、エディットボックスの表示をしなかったらどうなりますか?
そこいら辺を確かめたあと、問題がある部分のコードを出したらいかが?
この回答への補足
御回答ありがとうございます。
ADボードを使用せず、エディットボックスを毎秒表示するとやはりフリーズしました
ADボードだけならフリーズはしませんでした。
SetWindowText関数をコメントアウトするとフリーズしなくなります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 工学 非対称三相交流について 2 2022/07/06 00:36
- その他(データベース) Accessフォームにて指定のフィールドの平均値を小数点第一位で表示できない 2 2022/08/30 17:19
- デスクトップパソコン pcが1日に3-4回ほどフリーズするようになりました。 ゲームのプレイや特定のサイト(Twitchな 1 2023/06/16 04:25
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/06/19 10:08
- 電気工事士 10A DC100v デジタル電圧電流計と50Aシャント抵抗 9 2023/06/16 15:53
- その他(Microsoft Office) エクセルについて教えてください。 2 2022/10/20 14:55
- フィルムカメラ・インスタントカメラ 自販機の電光を撮影するとルーレット状に 3 2022/12/22 14:29
- Visual Basic(VBA) VBA 複数のブックに同じ列を表示させる方法 2 2022/07/20 23:49
- スピーカー・コンポ・ステレオ 電気交流の実効値と値が違う平均値ではオームの法則が成り立たない理由を教えて下さい。 4 2022/05/02 09:53
- Access(アクセス) Access DTPickerの初期表示月を変えたい 1 2022/08/02 08:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別フォームから戻ったときのイ...
-
「Cancel = True」とはどういう...
-
VBAでIEの「Web ページからのメ...
-
左シングルクリックと左ダブル...
-
VB2005 DataGridView上でクリッ...
-
マイページはどこを開くの
-
デジタル時計の時刻合わせの方...
-
ウインドウを毎回同じ位置、大...
-
エクセルのシート上に別のシー...
-
VBAのユーザーフォームのframe...
-
Javascript_submit()完了後に処...
-
VBAで任意のウインドウのサイズ...
-
小さな表示窓の呼び方は
-
Excelでワードアートや図を常に...
-
バッチファイルでdiskpart.exe...
-
PDFファイルの向きを縦から横に...
-
【Android】ユーザー補助機能ボ...
-
PDFを(htmlのように)無限に縦...
-
Photoshop 7 画像に上の青い境...
-
Windowsのポップアップの表示方...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「Cancel = True」とはどういう...
-
別フォームから戻ったときのイ...
-
VB2005 DataGridView上でクリッ...
-
excelのタスクバーアイコンが・...
-
Perlで数値(小数点、負の数、...
-
VB6.0のEnabledをfalseにしても...
-
VBAでIEの「Web ページからのメ...
-
エクセル アプリケーションの...
-
【ImageMagick】 PDF → JPG 変...
-
【C#】ラベルのダブルクリック...
-
Perlでページ処理がどうしても...
-
vba IE操作で こういう事って...
-
別ページからのタブ切り替えの...
-
処理終了後のに砂時計が、クリ...
-
数千行HTML 画面表示の性能改善
-
javascriptの中で、perlのコマ...
-
C# マウスオーバーの記述方法
-
実行中のOSを知るには?
-
C++での連続した左クリックの禁...
-
Sleep関数の最大時間について
おすすめ情報