[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]
[MD:2989] Meadow 1.99a1 - Access violation.
- X-ml-count: 2989
- Subject: [MD:2989] Meadow 1.99a1 - Access violation.
- From: MIYASHITA Hisashi(宮下 尚:HIMI) <himi@xxxxxxxxxxx>
- Date: Tue, 26 Feb 2002 16:15:34 +0900
- User-agent: T-gnus/6.15.4 (based on Oort Gnus v0.04) (revision 11) SEMI/1.14.3 (Ushinoya) FLIM/1.14.2 (Yagi-Nishiguchi) APEL/10.3 Emacs/21.1 (i386-msvc-nt5.1.2600) MULE/5.0 (SAKAKI) Meadow/1.99 Alpha1 (AWOFUCHI)
Kyotaro HORIGUCHI <horiguchi.kyotaro@xxxxxxxxxxxxxxxxxxxxx> writes:
> とりあえず(自分がやったことに関しては)何がおきているのかはわかり
> ました.
>
> 自分に投げたメッセージ(WM_MULE_IMM...CONVERSION_WINDOW)を
> mw32WndProc が拾う前に自分で拾って捨ててしまっていました;_;
^^;;;
> そのせいで本当に待っているメッセージがこなくて固まっていました.
>
> # この辺りの処理ではWindowsのメッセージの仕組みを使うのをやめたほ
> # うが平和じゃないでしょうか. いらないメッセージを捨てるときにま
> # ずいものを捨ててる可能性も出てくるし...
>
>> 同じ(Windowsの)ウインドウに対して多重にこのPostMessageをやると固
>> まるようなんですが, どうやってそれを防ぐかは私にはもっとちゃんと
>
> 自分自身のアクティブウィンドウにメッセージを投げそうになったとき
> は直接関数を呼び出すようにしてみたらとりあえず動いています.
いや、この変更は、ほとんどchaotic的と言えませんか? それに、
このままだとmain threadから呼ばれたときにまずいことになります。
要は、message threadから呼び出されたときまずいということですよね。
まあ、MW32_MAIN_THREAD_P()を用いても良いんですが。
で、私もなんで、ここだけ、POST_INFORM_MESSAGEを用いずに、PostMessage()を
使っていたのか思い出し始めました。
そもそも、Windowsのメッセージ処理は、私の考えでは、大体2つのパターンに
分けられます。
(1) criticalな情報交換。到達性保証
(2) UI実装の委譲手段 到達性は、UI制御によっては不要
で、今回の場合は、IMEのwindowの位置を決定しているだけなので、(2)に
該当します。で、同期性も必要ないので、PostMessage()で十分。
という理由だったんだと思います。そうすると、邪魔なのは、余計なREPLY messageだけで、
これがqueueを詰まらせるのだとすると、
Index: mw32fns.c
===================================================================
RCS file: /usr/local/Meadow/cvsroot/Meadow/src/mw32fns.c,v
retrieving revision 1.26
diff -c -r1.26 mw32fns.c
*** mw32fns.c 2002/02/09 12:52:59 1.26
--- mw32fns.c 2002/02/26 07:13:08
***************
*** 3221,3235 ****
#endif /* not W32_VER4 */
case WM_MULE_IMM_SET_COMPOSITION_FONT:
mw32_set_ime_font(hwnd, (LPLOGFONT) lParam);
- POST_THREAD_INFORM_MESSAGE(main_thread_id,
- WM_MULE_IMM_SET_COMPOSITION_FONT_REPLY,
- (WPARAM) 0, (LPARAM) 0);
- break;
case WM_MULE_IMM_SET_CONVERSION_WINDOW:
mw32_set_ime_conv_window(hwnd, (int)wParam, (int)lParam);
- POST_THREAD_INFORM_MESSAGE(main_thread_id,
- WM_MULE_IMM_SET_CONVERSION_WINDOW_REPLY,
- (WPARAM) 0, (LPARAM) 0);
break;
#endif /* not MEADOW and IME_CONTROL */
--- 3221,3228 ----
この変更で十分じゃないですかね。いまのところ、WM_MULE_IMM_SET_COMPOSITION_FONTは
使用されていませんけど、これも同じことなので削っときましょう。
from himi