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以降で内部処理が変わったのかは未消化。