[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

Re: [MD:7426] emacs-22_0_50-20060729 マージ



>>>>> [meadow-develop : No.7431] にて
>>>>> やまざきさんは書きました:
> sit-forで秒指定した場合、キー入力やWindowsのイベントが発生するまで、
> 応答が戻ってこないようになっているみたいです。

snip

> 一応以下のようにすれば、上記の式で5秒間入力ない場合、
> 100%ではありませんが、"time over"するようになります。
> また、上記の(1)/(2)の現象は、発生しなくなりますが、
> (3)は、少しは改善しますが、まだ発生します。

kbd_buffer_get_event()@keyboard.c の中の
wait_reading_process_output() でタイムアウトした場合に、
入力が無いにも係わらず、
>	/* Pass 1 for EXPECT since we just waited to have input.  */
>	read_avail_input (1);
としているのでブロックしちゃってます。
他の実装で問題にならない理由が良く分かっていませんが、NTEmacs の実
装では expect を無視するようです。

やまざきさんの修正案は、
> ただ、この修正は、影響範囲が不明であることと
これが心配です。多分、別スレッドとの同期の問題が発生すると思いま
す。

きちんとやるには、wait_reading_process_output() でタイムアウトした
場合には、
>	read_avail_input (0);
にするのが良いのでしょう。

でもタイムアウトが発生したのか判定する方法が良く分かりません。
wait_reading_process_output() の返す値もよく分からないし。
もう少し調べてみます。

> # sif-forの実装がかわってから、display-timeが更新されなくなるなど、
> # なんとなく挙動がおかしかったのですが、いまさらなんで
> # 変更されたのですかね?
同感です。

--
三好 雅則 http://miyoshi.meadowy.org/