![]() |
|
起動処理のような長時間のブロッキング処理中に、OS の「応答なし」判定 (タイトルバーの "応答なし" 表示・ゴースト化による白画面) を回避するための メッセージポンプ。 [詳解]
静的公開メンバ関数 | |
| static void | Pump (bool force=false) |
| フリーズ判定を避けるために必要最小限のメッセージ処理を行う。 呼び出し間隔は自動で間引かれるので、ループの中から毎回呼んでも構わない。 [詳解] | |
起動処理のような長時間のブロッキング処理中に、OS の「応答なし」判定 (タイトルバーの "応答なし" 表示・ゴースト化による白画面) を回避するための メッセージポンプ。
プレイヤーはネイティブのタスクループ (SharpKmy.Entry.run) が回り始めるまで ウィンドウメッセージを一切処理しない (メッセージ処理は kmyWindowsCommon の "windows message task" が担当しており、run 開始前は動かない)。 そのためウィンドウ生成から最初のフレームまでの間に数秒以上かかると、 OS からフリーズと判定されてしまう。 起動手順の各段階で Pump() を呼び出しておくことで、 OS に対して「このスレッドは応答している」ことを通知し続けられる。
エディタ側の ProgressWindow.pumpMessages() と同じ方針で、実際に取り出して 処理するのは描画メッセージ (WM_PAINT) のみに限定している。 入力やタイマーまで取り出してしまうと、初期化途中の状態で各種ハンドラが動いて 副作用 (二重実行やまだ準備できていないシーンへのアクセス) を起こす恐れがあるため。 PeekMessage の呼び出し自体が OS に応答中であることを通知する効果を持つので、 処理すべきメッセージが無い場合でもハング判定は回避できる。
|
static |
フリーズ判定を避けるために必要最小限のメッセージ処理を行う。 呼び出し間隔は自動で間引かれるので、ループの中から毎回呼んでも構わない。
| force | true なら間引きをスキップして必ず処理する |