unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* Fun with async processes
@ 2022-01-31 15:44 Manuel Giraud
  2022-01-31 15:56 ` tomas
  0 siblings, 1 reply; 12+ messages in thread
From: Manuel Giraud @ 2022-01-31 15:44 UTC (permalink / raw)
  To: help-gnu-emacs

Hi,

Imagine, you have some async emacs processes with a sentinel each. What
is the common emacs lisp pattern to have some kind of sentinel for all
those processes (ie. do something when they all have finished)? I'd like
to avoid a busy waiting like in the following example:
--8<---------------cut here---------------start------------->8---
(defun chatty-sentinel (process event)
  (when (string-match "finished" event)
    (message "Chatty has finished talking.")
    (kill-buffer (process-buffer process))))

(defun chatty ()
  (let* ((buffer (generate-new-buffer "chatty"))
	 (process (start-process-shell-command
		   (buffer-name buffer) buffer
		   "find ~/.emacs.d -type f")))
    (when process
      (set-process-sentinel process #'chatty-sentinel)
      process)))

(defun thinker-sentinel (process event)
  (when (string-match "finished" event)
    (message "Thinker has finished thinking.")
    (kill-buffer (process-buffer process))))

(defun thinker ()
  (let* ((buffer (generate-new-buffer "thinker"))
	 (process (start-process-shell-command
		   (buffer-name buffer) buffer
		   "for i in $(jot 10); do (echo $i && sleep $i) done")))
    (when process
      (set-process-sentinel process #'thinker-sentinel)
      process)))

(defun myrun ()
  (interactive)
  (let ((processes (list (chatty) (thinker))))
    (while (cl-loop for process in processes
		    thereis (eq (process-status process) 'run))
      (sit-for 0.1))
    (message "Both have finished.")))
--8<---------------cut here---------------end--------------->8---

Cheers,
-- 
Manuel Giraud



^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2022-02-01 23:10 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-01-31 15:44 Fun with async processes Manuel Giraud
2022-01-31 15:56 ` tomas
2022-01-31 17:11   ` Emanuel Berg via Users list for the GNU Emacs text editor
2022-01-31 17:49     ` tomas
2022-01-31 18:11       ` Emanuel Berg via Users list for the GNU Emacs text editor
2022-02-01  8:54   ` Manuel Giraud
2022-02-01 10:50     ` tomas
2022-02-01 13:30       ` Manuel Giraud
2022-02-01 13:43         ` tomas
2022-02-01 13:54           ` Manuel Giraud
2022-02-01 14:31             ` tomas
2022-02-01 23:10         ` Emanuel Berg via Users list for the GNU Emacs text editor

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).