首页 > 解决方案 > 球拍/gui:睡觉时不冻结gui

问题描述

我正在写一个单元测试,我想:

  1. 打开一个框架
  2. 等待几秒钟
  3. 关闭框架

这是我尝试过的代码:

#lang racket/base
(require plot racket/class)

(define f
  (plot3d-frame (surface3d (λ (x y) (* (cos x) (sin y))) -3.0 3.0 -3.0 3.0)))
(send f show #true)
(sleep 10)
(send f show #false)

运行它会打开一个空白帧,等待 10 秒,然后关闭该帧。情节永远不会出现。我想这是因为sleep让整个线程(包括eventspace)进入睡眠状态。

有没有办法让我的代码在不让 GUI 进入睡眠状态的情况下进入睡眠状态?

标签: user-interfaceracketsleep

解决方案


是的,使用sleep/yield

#lang racket/base
(require plot racket/class racket/gui/base)

(define f
  (plot3d-frame (surface3d (λ (x y) (* (cos x) (sin y))) -3.0 3.0 -3.0 3.0)))
(send f show #true)
(sleep/yield 10)
(send f show #false)
;; "It works every time!"

推荐阅读