【问题标题】:Sleep in Smalltalk Squeak在 Smalltalk Squeak 中睡觉
【发布时间】:2016-05-05 14:19:00
【问题描述】:

我正在处理 N*N 皇后问题和它的 gui。 我想每次移动都睡几秒钟,这样观众就可以看到这个过程。 如何让 smalltalk 进入睡眠状态?

谢谢

【问题讨论】:

    标签: smalltalk squeak


    【解决方案1】:

    你可以等待,而不是睡觉。

    5 seconds asDelay wait.
    

    例如如果您选择并打印它以下内容,它将在打印结果之前等待5秒(2)

    [
        5 seconds asDelay wait.
        1 + 1
    ] value
    

    Delay 类的注释解释了它的作用。

    我是进程可能暂停一段时间的主要方式。最简单的用法是这样的:

    (延迟秒数:5)等待。

    Delay 实例通过将调用者的进程挂起一段时间来响应消息“等待”。暂停的持续时间是在使用消息 forMilliseconds: 或 forSeconds: 创建延迟时指定的。当前等待完成后,可以再次使用延迟。例如,一个时钟进程可能会反复等待一秒的延迟。

    保存图像快照时的延迟在重新启动快照时恢复。延迟适用于毫秒时钟翻转。

    有关更复杂的示例,请参阅#testDelayOf:for:rect:。

    更新:(基于评论)

    wait 将暂停执行流程,这意味着在前面的示例中,1 + 1 将在等待期结束后才被执行(执行流程恢复)。

    所以在你的课堂上你可以...

    MyBoard>>doStep
        self drawBoard.
        5 seconds asDelay wait.
        self solve.
        5 seconds asDelay wait.
        self destroyBoard.
    

    【讨论】:

    • 等待究竟是如何工作的?我实例化我的板并绘制它,然后我希望它等待 x 秒,开始求解,等待 x 秒,然后删除板。我不确定我完全理解等待何时发生以及下一个/上一个命令何时发生
    • @Infested 我已经添加了延迟类的类注释。
    • @Infested 和另一个更新...如果我正确理解您的评论。
    • 谢谢,是的,你确实回答了我的问题!
    • 我确实看到了一些奇怪的东西,我以排列的形式在成绩单上打印解决方案(在解决方法中)并绘制它以及 gui。当我绘制等待解决时,它会在开始解决的同时绘制。知道为什么吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多