我想投机地用球拍表达,希望(但不是特别期待)一个结果。我的代码有一个很难的时间限制。是否有一种简单的方法可以运行一些球拍代码几秒钟,然后可靠地杀死它并在截止日期前点击执行后备代码?
答案 0 :(得分:6)
是的,一种简单的方法是使用engine库。例如:
#lang racket
(require racket/engine)
(define e (engine
(λ (_)
;; just keep printing every second
(let loop ()
(displayln "hi")
(sleep 1)
(loop)))))
;; run only for 2 seconds
(engine-run 2000 e)
您也可以指定event对象,而不是指定时间,以便在事件触发时线程停止运行。
答案 1 :(得分:3)
你可以创建一个“工人”线程来完成工作,另一个“观察者”线程可以杀死工人。
这在文档的More: Systems Programming部分中有所描述。
最简单的第一次切割可能足以进行计算:
(define (accept-and-handle listener)
(define-values (in out) (tcp-accept listener))
(define t (thread
(lambda ()
(handle in out)
(close-input-port in)
(close-output-port out))))
; Watcher thread:
(thread (lambda ()
(sleep 10)
(kill-thread t))))
但是,如果您正在处理其他资源,请了解托管人。