2011-01-11 12 views

Antwort

5

Dort wird der Scheduler project on SqueakSource ist, die für Smalltalk wie cron aussieht. Aus der Übersicht:

"Start a new task scheduler and keep it around" 
scheduler := TaskScheduler new. 
scheduler start. 
"Let's save the image every hour" 
scheduler 
    do: [Smalltalk snapshot: true andQuit: false] 
    every: 60 minutes.

Sie können kombinieren, dass mit dem Sperrcode oder OSProcess des saveImageInBackgroundNicely oben erwähnt und eine schöne einfache Lösung.

+0

Danke. Scheduler funktioniert ziemlich gut. Ich habe gerade verwendet: tun: [SmalltalkImage aktuellen Snapshot: True andQuit: false.] Und auch Smalltalk Run als Adiministrator , so dass es die Datei speichern konnte. – elviejo79

5

Result of a discussion on the mailing list, mit etwas Vereisung um ihn herum laufen nur stündlich:

[[self blockUI. 
    self doUpdate. 
    SmalltalkImage current snapshot: true andQuit: false. 
    self unblockUI. 
    (Delay forDuration: (Duration hours: 1)) wait] repeat] fork 
+0

Weiter unten [derselbe Thread] (http://lists.gforge.inria.fr/pipermail/pharo-project/2010-July/029851.html) Es gibt auch eine Erwähnung von 'UnixProcess saveImageInBackgroundNicely' aus * OSProcess * Das kann ein Bild mit einem Hintergrund-Unix-Prozess speichern. Sie können dies bevorzugen, wenn Sie nicht möchten, dass das Bild jede Stunde blockiert. –

+0

Hmm. Ich kann keine Methode namens saveImageInBackgroundNicely in Pharo 1.1.1 finden. Weder eine Klasse UnixProcess. Ich frage mich, was dort passiert ist. – nes1983

+0

Diese Klasse stammt aus [OSProcess] (http://www.squeaksource.com/OSProcess.html), die nicht im Basis-Pharo enthalten ist. –

1

Sie können es tun, und es könnte gut funktionieren.

Aber ich würde es nicht tun.

Keine Persistenz in der Produktion.

Warum?

Weil Bilder wie Ihre Sitzung in Ihrem Laptop sind. Speichern Sie Ihr Bild ist wie Ihren Laptop schlafen zu legen: Es bleibt alles bestehen.

Und auf lange Sicht, einige Staaten haben einige unerklärliche Scheiße, die etwas komplizieren können, und Sie müssen einen harten Neustart tun.

Es hilft nicht zu versuchen, Perfektionist darüber zu sein (oder vielleicht tut es, aber ist sicherlich nicht wirtschaftlich). Es wird nur passieren und Neustart Ihres Laptops ist die billige Lösung, um einen neuen Zustand zu haben. Aber das für Ihre Smalltalk-App ist vielleicht nicht so billig.

Ein harter Neustart in Smalltalk bedeutet, dass Sie ein neues Image erstellen und wieder Ihren gesamten Code laden müssen (es kann automatisiert werden, aber die Erfahrung zeigt, dass das zeitaufwändig sein könnte).

+0

+1 für diese Ansicht, aber ich stimme nicht zu. Bildbasierte Persistenz kann erfolgreich verwendet werden.Ich denke sogar Dabble DB verließ sich darauf (mit einem Image pro Kunde). Es kann schwieriger sein, bestimmte Probleme in einem komplexen Objektdiagramm zu identifizieren als eine schemabasierte Datenbank, und Squeak selbst kann nur so viele Daten verarbeiten, aber es geht nur um Kompromisse. –

+1

Um eine vernünftige Persistenz in Bildern zu erzielen, müssen Sie bei Transaktionen flexibel sein. Wenn der Server (oder die VM) aus irgendeinem Grund ausfällt, bevor ein Speichern ** schadet **. Nicht alle Anwendungen können den Luxus zulassen, nicht ACID zu sein. –