1

::PostMessage(hWnd, [...]);非同期操作の結果を警告するメッセージをメインスレッドに送信するために呼び出すスレッドがあります。

ただし、スレッドが操作を完了するのに特に長い時間がかかるhWnd場合、 が呼び出されたときに が存在しない可能PostMessage性がある (ユーザーがウィンドウを閉じた可能性がある) ことが懸念されます。

が無効な場合、MSDN ドキュメントは結果について何も述べていません。hWnd

hWndが無効な場合に期待できることについて、経験または他のドキュメントから知っていますか?

4

2 に答える 2

3

レイモンド・チェンはこれについて次のように書いています。

いくつかの選択の抜粋:

プログラムのボートロード (「ボートロード」は専門用語です) には、ウィンドウが破棄された後にウィンドウ ハンドルを使用するバグが含まれていることがあります。ウィンドウ ハンドルが再利用されると、そのプログラムは、まだそこにあると思われるウィンドウにメッセージを送信しますが、代わりに、まったく関係のないウィンドウにメッセージを送信します。これは、プログラムにとって良い兆候ではありません。また、メッセージを誤って受け取った新しいウィンドウにとっても、通常は良い兆候ではありません。


前回は、既に破棄されたウィンドウにメッセージを送信するプログラムの問題と、ウィンドウ ハンドルの再利用が問題を悪化させるという問題を取り上げて、話を中断しました。これはウィンドウを破棄した後にウィンドウ ハンドルを使用するプログラムのバグであることは明らかですが、この問題は広範囲に及んでいるため、Windows NT のウィンドウ マネージャはより積極的なアプローチを取ることにしました。

于 2013-06-13T20:12:31.467 に答える
1

HWND他の人が指摘したように、Ramond Chen は、 が新しいウィンドウで再利用される とどうなるかを説明しました。PostMessage()成功しますが、間違ったウィンドウに移動するだけです。ただし、HWNDが再利用されない場合、 (1400) エラー コードPostMessage()で失敗します。ERROR_INVALID_WINDOW_HANDLE

于 2013-06-14T02:36:56.897 に答える