環境:Visual Studio2008 MFC ダイアログベース
While(1){
- 処理内容 -
UpdateData(false);
}
とした場合に、処理中、ウインドウが固まってしまって
ダイアログ上のエディットボックスに情報が更新されません…。
対処方法をご教授願えませんでしょうか?
OnTimer関数内で
- 処理内容 -
UpdateData(false);
とした場合は、問題なく情報が更新され続けます。
これでは永久ループになっちゃうんですけど。
while文の使い方分かっていますか?
- 処理内容 -
部分にwhile文から脱出するルートは有りますか?
また、処理内容部でループから脱出すると
UpdateData(false);
が実行されなくなります。
すみません、説明不足でした。
whileの中で指定時間を越えると処理を終了(break)します。
プログラム自体は処理を問題なく終了しますが、
処理中の結果をダイアログ上で見たい感じです。
while文中のUpdateData(false)が実行されていても
ダイアログ上に反映されない状況です。
そのwhileループはどこにあるんでしょう?
ワーカースレッドなどでなく、プロシージャ内だとするとそのループが終わるまでメッセージの処理ができません。
瀬戸っぷの回答を補足してみると、
UpdateData関数の内部まで分かっているわけではありませんが、おそらく
ダイアログの表示に反映する処理を行っているわけではなく、ダイアログの
表示を行うメッセージを送出(PostMessage)めでを行っていて、それに対す
るメッセージの処理が行われるまで実際の表示の反映は行われないと考えら
れます。
While(1){
- 処理内容 -
UpdateData(false);
}
という記述ではWhileループから抜け出すまでそのメッセージの処理が出来
ないため、ダイアログは反映されないという状況になっています。
whileの中で処理中の結果をダイアログ上で見る為にはメッセージループを
組み込む必要がありますが、普通はそんなことは行わずマルチスレッドで
処理します。
瀬戸っぷ様
前回の発言で、敬称を付け忘れました。申し訳ありませんでした。
> 表示を行うメッセージを送出(PostMessage)めでを行っていて、
訂正
表示を行うメッセージを送出(PostMessage)までを行っていて、
ツイート | ![]() |