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


ぽち  2010-01-27 03:16:48  No: 71321

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

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

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


maru  2010-01-27 03:36:03  No: 71322

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


ぽち  2010-01-27 04:42:19  No: 71323

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

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


瀬戸っぷ  2010-01-27 07:50:42  No: 71324

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

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


maru  2010-01-28 19:11:41  No: 71325

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

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


maru  2010-02-02 02:28:28  No: 71326

瀬戸っぷ様

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

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加