5

我想投机地在球拍中运行一个表达式,希望(但不是特别期待)一个结果。我的代码有严格的时间限制。有没有一种简单的方法可以运行一些球拍代码几秒钟,然后可靠地杀死它并在截止日期到来之前执行回退代码?

4

2 回答 2

6

是的,一个简单的方法是使用引擎库。例如:

#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)

除了指定时间,您还可以指定一个事件对象,以便在事件触发时线程停止运行。

于 2013-06-22T17:10:48.157 回答
3

您可以创建一个“工作”线程来完成工作,并创建另一个“观察者”线程来杀死工作人员。

这在文档的更多:系统编程部分中进行了描述。

最简单的第一次切割可能足以满足您的计算:

(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))))

但是,如果您正在处理其他资源,请继续阅读以了解保管人。

于 2013-06-22T17:11:11.580 回答