出力の一時停止と再開
Posted feedbacks - Common Lisp
sbcl依存のthreadパッケージを利用しています。一つわからない ことがあって、それはdefpackage - in-packageの流れでパッケー ジ化すると、うまく動かないところです。 thread programmingははじめてなので、変数の取り扱いの 注意点が抜けてるみたいです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | (defun print-a ()
(format *standard-output* "a")
(finish-output)
(sleep 1))
(defmacro read-thread(res)
`(sb-thread:make-thread
(lambda()(setf ,res (read *standard-input*)))))
(defun main ()
(let* ((res nil)
(stop nil)
(thread (read-thread res)))
(loop do
(if (null (sb-thread:thread-alive-p thread))
(case res
((q)
(return))
((p)
(and stop (print-a))
(setf stop (not stop)
thread (read-thread res)))
(otherwise
(unless stop (print-a))
(setf thread (read-thread res))))
(unless stop (print-a))))))
|


nobsun
#6346()
Rating3/3=1.00
起動すると、標準出力に1秒毎に'a'の1文字を出力し続けるプログラムで、 以下の条件を満たすものを「どう書く?」
[ reply ]