C++ Builder > Application->ProcessMessage()後の処理の違い / モーダル表示のフォームがある時 > Windows 7: 処理が続く / Windows 8.1, Windows 10: 処理が固まる
C++ Builder XE4
以下のような処理をするソフトの修正をしている。
- TTimer処理
- 内部で
Application->ProcessMessage()
をコール
- 内部で
- 同じフォーム上の別の処理
- 特定の条件が成立したときに別フォームをモーダル表示
OSによって動作の違いが見られた。
Windows 7
TTimer処理のApplication->ProcessMessage()
の次の処理に戻ってくる。
Windows 8.1, Windows 10
TTimer処理のApplication->ProcessMessage()
で処理が止まる。
モーダル表示のフォームがクローズされるまで処理停止状態。
対応方法
TTimerなどの「すぐに抜けるべき処理」においてApplication->ProcessMessage()
を使わない。
前任者がなぜそこに「Application->ProcessMessage()」を入れたかは不明であるが、TTimer処理内で入れるべきではないと考えている。
修正後のソフトをWindows 7/8.1/10にて動作確認した。
Windows 7で問題がなかったのは、たまたまなのか。Windows 8.1以降で内部処理が変わったのかは未消化。
Author And Source
この問題について(C++ Builder > Application->ProcessMessage()後の処理の違い / モーダル表示のフォームがある時 > Windows 7: 処理が続く / Windows 8.1, Windows 10: 処理が固まる), 我々は、より多くの情報をここで見つけました https://qiita.com/7of9/items/bd75e5beb5fc59526882著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .