while文の処理結果をエディットに反映させるには?


ぽち  2010-01-26 18:16:48  No: 71321  IP: [192.*.*.*]

環境:Visual Studio2008 MFC ダイアログベース

While(1){
- 処理内容 -
UpdateData(false);
}
とした場合に、処理中、ウインドウが固まってしまって
ダイアログ上のエディットボックスに情報が更新されません…。
対処方法をご教授願えませんでしょうか?

OnTimer関数内で
- 処理内容 -
UpdateData(false);
とした場合は、問題なく情報が更新され続けます。

編集 削除
maru  2010-01-26 18:36:03  No: 71322  IP: [192.*.*.*]

これでは永久ループになっちゃうんですけど。
while文の使い方分かっていますか?
- 処理内容 -
部分にwhile文から脱出するルートは有りますか?
また、処理内容部でループから脱出すると
UpdateData(false);
が実行されなくなります。

編集 削除
ぽち  2010-01-26 19:42:19  No: 71323  IP: [192.*.*.*]

すみません、説明不足でした。

whileの中で指定時間を越えると処理を終了(break)します。
プログラム自体は処理を問題なく終了しますが、
処理中の結果をダイアログ上で見たい感じです。
while文中のUpdateData(false)が実行されていても
ダイアログ上に反映されない状況です。

編集 削除
瀬戸っぷ  2010-01-26 22:50:42  No: 71324  IP: [192.*.*.*]

そのwhileループはどこにあるんでしょう?

ワーカースレッドなどでなく、プロシージャ内だとするとそのループが終わるまでメッセージの処理ができません。

編集 削除
maru  2010-01-28 10:11:41  No: 71325  IP: [192.*.*.*]

瀬戸っぷの回答を補足してみると、

UpdateData関数の内部まで分かっているわけではありませんが、おそらく
ダイアログの表示に反映する処理を行っているわけではなく、ダイアログの
表示を行うメッセージを送出(PostMessage)めでを行っていて、それに対す
るメッセージの処理が行われるまで実際の表示の反映は行われないと考えら
れます。
While(1){
- 処理内容 -
UpdateData(false);
}
という記述ではWhileループから抜け出すまでそのメッセージの処理が出来
ないため、ダイアログは反映されないという状況になっています。
whileの中で処理中の結果をダイアログ上で見る為にはメッセージループを
組み込む必要がありますが、普通はそんなことは行わずマルチスレッドで
処理します。

編集 削除
maru  2010-02-01 17:28:28  No: 71326  IP: [192.*.*.*]

瀬戸っぷ様

前回の発言で、敬称を付け忘れました。申し訳ありませんでした。

> 表示を行うメッセージを送出(PostMessage)めでを行っていて、
訂正
  表示を行うメッセージを送出(PostMessage)までを行っていて、

編集 削除