【发布时间】:2011-01-11 08:20:36
【问题描述】:
我想每隔一小时自动保存我的 Pharo 图像。
如何在图像中自动实现这一点?
我已经看到 Pier 项目这样做了。 但我不确定他们是怎么做到的。
TIA
【问题讨论】:
标签: smalltalk pharo seaside projectpier
我想每隔一小时自动保存我的 Pharo 图像。
如何在图像中自动实现这一点?
我已经看到 Pier 项目这样做了。 但我不确定他们是怎么做到的。
TIA
【问题讨论】:
标签: smalltalk pharo seaside projectpier
Scheduler project on SqueakSource 看起来像 Smalltalk 的 cron。从概述:
“启动一个新的任务调度程序并保留它” 调度程序:= TaskScheduler 新。 调度程序启动。 “让我们每小时保存一次图像” 调度器 做:[Smalltalk 快照:真和退出:假] 每:60 分钟。
您可以将它与上面提到的阻塞代码或 OSProcess 的 saveImageInBackgroundNicely 结合起来,得到一个很好的简单解决方案。
【讨论】:
Result of a discussion on the mailing list, 加上一些糖霜,每小时运行一次:
[[self blockUI.
self doUpdate.
SmalltalkImage current snapshot: true andQuit: false.
self unblockUI.
(Delay forDuration: (Duration hours: 1)) wait] repeat] fork
【讨论】:
UnixProcess saveImageInBackgroundNicely,它可以使用后台 Unix 进程保存图像。如果您不希望图像每小时都被阻止,您可能更喜欢使用它。
你可以做到,它可能工作得很好。
但我不会这样做。
不支持生产中的持久性。
为什么?
因为图像就像您在笔记本电脑中的会话。保存图像就像让您的笔记本电脑进入睡眠状态:它会保留所有内容。
从长远来看,某些状态会出现一些无法解释的问题,这会使事情复杂化,您需要进行硬重启。
尝试成为完美主义者并没有帮助(或者可能会这样做,但肯定不经济)。它会发生,重新启动笔记本电脑是获得新状态的廉价解决方案。但是对于您的 smalltalk 应用来说,这可能并不便宜。
在 smalltalk 中硬重启意味着您必须拍摄新的图像并再次加载所有代码(它可以是自动化的,但经验表明这可能很耗时)。
【讨论】: