[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: start-process
From: TSUCHIYA Masatoshi <tsuchiya@pine.kuee.kyoto-u.ac.jp> さん曰く
Subject: [emacs-w3m:00432] Re: start-process
Message-ID: <mpa1yrak106.fsf@azalea.kuee.kyoto-u.ac.jp>
Date: 03 Apr 2001 14:26:01 +0900
白井> この秒数の差で問題が出るなら、sentinel を使った方が良いんじゃ無
白井> いでしょうか?
土> うーん。秒数の問題だけじゃないようなんですけど。例えば、私の環境では以
土> 下のようなコードは、無限ループしてしまいます。
土> (with-temp-buffer
土> (let* ((process-connection-type t)
土> (proc (start-process "*w3m*"
土> (current-buffer)
土> "w3m" "-dump_source" "http://namazu.org/"))
土> (w3m-process-running t))
土> (set-process-sentinel proc
土> (lambda (proc event)
土> (and (string-match "^\\(finished\\|exited\\)" event)
土> (buffer-name (process-buffer proc))
土> (save-excursion
土> (set-buffer (process-buffer proc))
土> (setq w3m-process-running nil)))))
土> (while w3m-process-running
土> (sleep-for 0.1))
土> (process-exit-status proc)))
○ (while w3m-process-running (sleep-for 0.1))
だと、w3m-process-running が nil か否かの判定の時間しか process
の扱いに CPU が割り振られないと思う。(sit-for 0.1) なら動きます
よ。
というか sleep-for がどうしても必要な時以外は sit-for だと思う
のだけど。(正しい認識かどうかは不明)
○ sentinel で最初に event string を見ているけど、違う終わり方を
されるとダメだから、これはやめた方が。。。
○ local に束縛している w3m-process-running を sentinel な無名関
数(って言うんだっけ?)で nil にして反映するのかな?と思ったのだ
けど、実験の結果 OK だった。run-hooks と一緒なんだ。
ぐらいな感想でございます。
土> この場合は C-g 連打で抜けること自体はできるので、これまでに出てきた固
土> まってしまうコードよりはましですけど。
Emacs-21 だと固まった。
白井> # しかし、私の XEmacs だと process-connection-type を nil にしな
白井> # いと終りがわからない。。。
土> ああ、此の問題は私だけじゃなかったんですか。私も、XEmacs の場合は
土> w3m-process-connection-type => nil にして使ってます。
初めて XEmacs を使ったときから、どうしてもこの辺りがうまく動かな
い。顕著な例は Mew + PGP/GPG です。
# 土屋さんもぼくも Solaris だからかな? 普段使わないから、気にす
# るのをやめてしまった。^^;;;
--
白井秀行 (mailto:shirai@rdmg.mgcs.mei.co.jp)