gpt4 book ai didi

lisp - lisp 中的非阻塞输入

转载 作者:太空宇宙 更新时间:2023-11-03 18:40:39 25 4
gpt4 key购买 nike

我有一个运行了很长时间的程序,我想中断它但不是用 ctrl-c ctrl-c。我也不希望系统经常等待击键。相反,如果我按下一个键,我希望它结束​​并退出。我找到了 listenread-char-no-hang 但我无法让它正常工作。这是我尝试做的事情

(let ((f nil))
(loop while (not f) do
(if (listen)
(setf f t)))))

显然,就查找 key=-presses 而言,这在 Xanax 上的表现还不如懒惰。我做错了什么?

最佳答案

我相信 CCL​​ 具有多线程。您可以尝试在后台生成一个工作线程并让一个控制线程执行阻塞读取,然后通过一个特殊变量进行通信。以下在 Lispworks 中工作,我没有可用的 CCL。您必须将 mp:process-run-function 转换为 CCL 用于生成线程的任何内容:

(defparameter *f* nil)
(defun cmd-loop ()
(setf *f* nil)
(mp:process-run-function "work" () #'do-work) ; Spawn worker
(read-char *terminal-io*) ; Blocking read
(setf *f* t))
(defun do-work ()
(loop while (not *f*)
do
(format t "~a " *f*)
(finish-output)))
(cmd-loop)

我在这里做的一个重要假设是 CCL 多线程与 LW 多线程的工作方式类似,因此两个线程都可以访问共享状态变量 *f*

关于lisp - lisp 中的非阻塞输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6480905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com