こんにちわ、蓑島です。
久しぶりに投稿します。

現在MFCを使用してマルチスレッドプログラムを作っています。
メインスレッドで作成したサブスレッド内から、メインスレッド内
のウィンドウに対し以下のようにメッセージを送っています。

  SendMessageTimeout(hwnd, msg, wParam, lParam, SMTO_BLOCK, 1000, &result);

呼び出し側のサブスレッドではブロッキングしたいので SMTO_BLOCK フラッグを
指定しています。

[現象その1]
Windows98SE 上でこの呼び出しを行うと、ブロッキングされることなくすぐに
制御がサブスレッド側に戻ってしまいます。この時の関数の戻り値は 0、
GetLastError() の戻り値も 0 で、MSDNライブラリによるとタイムアウトという
結果らしいのですが、実際にはメインスレッド側のメッセージハンドラは呼び出
されており、非同期に実行しています。

[現象その2]
上記関数には SMTO_NOTIMEOUTIFNOTHUNG というフラッグがあり、この値も同時
に指示すると Windows98SE でもうまくブロッキングされます。
ただし、このフラッグは Microsoft MSDN のページにおいて 'Windows 2000:'
という注記が入っています。

[質問]
現状では SMTO_NOTIMEOUTIFNOTHUNG も指定しないと正常に動作しません。
(そう見えているだけかもしれませんが。)
これらについて何かご存知の方がお見えになりましたらご教授願います。

開発環境:VC++6.0 SP5
-- 
株式会社クランプル 開発部
蓑島 幸治 <m...@crumple.co.jp>