[Date Prev][Date Next][Thread Prev][][Date Index][Thread Index]

Re: w3m-session-save|select



>>>>> In [emacs-w3m : No.09239] 廣松さん wrote:

> NTEmacs の廣松です。

>>>>>   (defadvice w3m-process-start-process (after process-sleep activate)
>>>>>     "sleep after start-process."
>>>>>     (sleep-for 0.3))
>>>>>   (defadvice w3m-process-sentinel (after process-sleep activate)
>>>>>     "sleep after process-sentinel."
>>>>>     (sleep-for 0.3))

[...]

> 私の環境だと、1.0 でも駄目です。環境が特殊と言えば特殊ですが。
> (ドイツから、日本のオフィスにVPNで入って、そこからproxyを介して外へ)
> 因みに、w3m は、cygwin の物です。

素朴な疑問: なんでドイツで emacs-w3m を走らせないんですか? ;-p

[...]

> 非同期に動かすプロセスの数の上限を設定できる様にできないでしょうか?

> 例えば、起動してから 6 秒経っても無反応な非同期プロセスは、強制的に殺
> すようにしておいて、上の sleep-for を、0.2 に設定すれば、30 個以上の
> プロセスは出来ないですよね?

XEmacs 21.5 でちょっと試してみたんですが (コードは下にあります)、
固まってしまう機会が増えたのは、何か間違えているせいでしょうか。
タイマーのプロセス自体もこれだけ多いと問題になるかもしれませんね。

(setq w3m-async-exec-with-many-urls t)

(defvar w3m-process-timer-alist nil
  "Alist of processes and timers.")

(defadvice w3m-process-start-process (after process-sleep activate)
  "Start a timer and sleep for a moment after starting the process.
The timer deletes the process if it remains over several seconds."
  (let* ((process (w3m-process-process (ad-get-arg 0)))
	 (timer (run-at-time
		 6 nil
		 (lambda (process)
		   (setq w3m-process-timer-alist
			 (delq (assq process w3m-process-timer-alist)
			       w3m-process-timer-alist))
		   (delete-process process))
		 process)))
    (push (cons process timer) w3m-process-timer-alist))
  (sleep-for 0.2))

(defadvice w3m-process-sentinel (after process-sleep activate)
  "Prolong the timer and sleep for a moment after running a sentinel."
  (let ((timer (cdr (assq (ad-get-arg 0) w3m-process-timer-alist))))
    (when timer
      (timer-set-time timer (timer-relative-time (current-time) 6))))
  (sleep-for 0.2))
-- 
山岡