all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / 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

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.