Ergänzungen zum TwiLight-Handbuch für Version
2.0
12. Konfigurationen
Im Konfigurationen-Menü können Ausnahmeregeln
für bestimmte Programme oder Farbtiefen eingestellt
werden.
Ein Bildschirmschoner muss im Hintergrund mit einer Vielzahl von
unterschiedlichen Programmen in verschiedensten
Bildschirmauflösungen und Farbtiefen zusammenarbeiten. Es ist
daher wünschenswert, den Bildschirmschoner im Zusammenspiel
mit den gerade laufenden Applikationen zu konfigurieren: Sei es,
dass im Monochrom-Modus mit anderen Modulen geschont wird als in
TrueColor, dass während eines 3D-Renderings weniger Rechenzeit
beansprucht wird, dass bei einem bestimmten (unsauberen) Programm
vielleicht überhaupt nicht geschont werden soll.
Genau dies kann in TwiLight eingestellt werden. Es stehen 8
verschiedene Konfigurationen zur Verfügung. In jeder
Konfiguration können alle Optionen von TwiLight beliebig
eingestellt werden. Jede Konfiguration ist alleine wirksam, wenn
sie im TwiLight-Hauptfenster eingestellt ist. Wird stattdessen
"Automatik" eingestellt, werden Konfigurationen automatisch
ausgewählt.
Folgende Bedingungen lassen sich einstellen:
- Farben: Die Konfiguration aktiviert sich in
der hier festgelegten Farbtiefe. Bei "Egal" spielt dieser Faktor
keine Rolle.
- Programmname: Hier lassen sich bis zu 3
GEM-Programme eintragen. Es muss der Dateiname ohne Erweiterung
eingegeben werden. Läuft eines der hier angegebenen Programme,
wählt TwiLight diese Konfiguration aus. Wird hier nichts
eingetragen wird nur die Farbtiefe berücksichtigt.
Drei Beispiele verdeutlichen hoffentlich den Sachverhalt:
Es soll eine Konfiguration erstellt werden, in der nur Module
selektiert sind, in welchen Linien vorkommen.
- TwiLight aufrufen.
- In den Dialog "Konfigurationen" wechseln.
- Wählen sie im Popup "Konfiguration" einen noch leeren
Eintrag aus.
- "Farben" auf "Egal" stellen, eventuelle Programmnamen
löschen.
- Wichtig: Achten Sie darauf, dass "für Automatik aktiv"
ausgeschaltet ist. Diese Konfiguration würde nämlich
ständig ausgewählt werden, da ihre Bedingungen "Farbtiefe
Egal, laufende Programme auch Egal" immer zutreffen.
- Geben Sie der Konfiguration einen Namen, zum Beispiel
"Linienmodule".
- Klicken sie OK wieder zum Hauptdialog von TwiLight zu
gelangen.
- Wählen Sie nun die neue Konfiguration aus, indem sie im
Popup "Konfiguration" (befindlich unter "Schonzeit"-Popup)
"Linienmodule" einstellen. TwiLight legt nun diese neue
Konfiguration an.
- Wie Sie sehen ist noch kein Modul selektiert, auch alle anderen
Einstellungen enthalten Default-Werte. Alle Einstellungen, die Sie
nun vornehmen, gelten nur für die Konfiguration
"Linienmodule". Selektieren Sie also mit gedrückter
Shift-Taste alle Linienmodule und klicken Sie auf "Sichern".
- Ihre normalen Einstellungen können sie aktivieren, indem
sie die Konfiguration "Automatik" auswählen. Wann immer Ihnen
der Sinn nach Linienmodulen steht, können Sie nun im
"Konfiguration"-Popup "Linienmodule" auswählen
Wenn Calamus in TrueColor geladen ist, soll in TwiLight die
Rechenzeit-Beanspruchung auf "wenig" stehen und nur das
Uhrzeit-Modul aktiv sein.
- TwiLight aufrufen, in den Dialog "Konfigurationen" wechseln und
einen noch leeren Eintrag wählen.
- Stellen Sie "Farben" auf "Echtfarben".
- Tragen Sie als Programmnamen "CALAMUS" ein.
- Schalten Sie "Für Automatik aktiv" ein.
- Geben Sie der Konfiguration den Namen "Calamus TC".
- Wechseln Sie mit OK in die Modulauswahl.
- Wählen Sie die Konfiguration im Popup aus. Wieder sind
keine Module selektiert und alle Einstellungen auf
Default-Werten.
- Stellen Sie TwiLight nun so ein, wie es sich unter Calamus in
TrueColor verhalten soll. Wählen Sie also das Uhrzeit-Modul
und stellen Sie die Rechenzeit-Beanspruchung im Dialog
"Grundeinstellungen" auf "wenig".
- Wählen Sie nun im Dialog "Modulauswahl" die Konfiguration
"Automatik" und klicken Sie auf "Sichern".
- Wenn TwiLight nun mit dem Schonen beginnen soll, prüft es,
ob Calamus läuft und TrueColor-Farbtiefe aktiviert ist und
wählt dementsprechend die Konfiguration "Calamus TC" aus.
Wenn das Programm "CoNnect" geladen ist, soll TwiLight
überhaupt nicht schonen.
- TwiLight aufrufen, in den Dialog "Konfigurationen" wechseln und
einen noch leeren Eintrag wählen.
- Faben auf "Egal" stellen und als Programmname "CONNECT"
eingeben.
- "für Automatik aktiv" einschalten und der Konfiguration
den Namen "Connect AUS" geben.
- Mit OK zurück zur Modulauswahl.
- Die Konfiguration auswöhlen und "Schonen nach:" auf
"inaktiv" stellen.
- Als Konfiguration "Automatik" anwählen und "Sichern"
klicken.
13. Energie sparen
In diesem Dialog kann der Energiespar-Modus Ihres Bildschirms
eingeschaltet werden.
Moderne Bildschirme können im StandBy-Modus weniger Energie
verbrauchen. Dabei wird das Monitor-Signal abgeschaltet. Im
"Energie sparen"-Dialog können Sie einstellen, ob TwiLight
diesen Modus unterstützen soll.
- Energie sparen aktiv: Ist dieser Kbopf
selektiert wird der Monitor nach einer bestimmten Zeit in den
Stromspar-Modus geschaltet.
- Aktivierungszeit: Der Zeitpunkt nach dem
Beginn des Schonens, an dem dies geschehen soll.
- Warnsignal: Zu häufiges Ein- und
Ausschalten belastet die Bildröhre unnötig. Aus diesem
Grund warnt TwiLigt auf Wunsch durch einen Warnton oder ein kurzes
Blinken, bevor das geschieht. Indem Sie TwiLight aufwecken
können Sie verhindern, dass der Stromsparmodus aktiviert
wird.
- Zeit vor dem Schonen: Hier können Sie die
Zeitspanne zwischen Warnsignal und wirklichem Abschalten
festlegen.
- Grafikhardware: Wenn Ihre Grafikhardware von
TwiLight unterstützt wird, kann man das hier sehen.
14. Modulprogrammierung
Threads in TwiLight 2.0
Was sind Threads in TwiLight?
Unter Threads versteht man Programmteile, die parallel zum
übrigen Hauptprogramm ablaufen. Da Threads bisher im
Atari-Bereich bis auf MiNT von keinem Betriebssystem
unterstützt wurden, sind TwiLight-Threads speziell darauf
abgestimmt, um eine einfache Implementation in Modulen zu
ermöglichen. Eine Routine, die als Thread ablaufen soll, sit
eine ganz normale Unterroutine, die als
VOID routine(VOID);
definiert ist.
Einbindgung der Threads in TwiLight
Die Thread-Routinen werden von TwiLight bei Bedarf nachgeladen.
Ob ein Modul Threads benötigt, zeigt es durch das Setzen des
Flags 7 im Modulheader. Das Modul hat dann Zugriff auf alle
Thread-Funktionen.
Überblick über die Thread-Funktionen
SCODE tl_threads_init (SWORD anzahl, ULONG stack_len);
anzahl: Anzahl der
Threads, die gleichzeitig laufen können.
stack_len: Die Länge des Stackbereiches in
Bytes pro Thread
OUT: 0 = OK, >0 = nicht genügen Speicher vorhanden.
VOID th_threads_exit(VOID);
Beendet alle noch laufenden Threads
und gibt den mit threads_init() angeforderten Speicher
wieder frei. Fordern Threads eigenhändig Speicher an, sollte
dieser in Umgekehrter Reihenfolge wieder freigegeben werden, um
Fragmentierung zu vermeiden.
SWORD tl_thread_install(XPOINT routine);
Installiert die unterroutine
"routine" als Thread. Die Routine wird nicht angesprungen.
Zurückgeliefert wird die ID des Threads oder -1, wenn bereits
die maximale Anzahl Threads läuft. Die ID wird verwendet, um
dem Thread eine Nachricht zu schicken.
VOID tl_threads_stop(VOID);
Alle installierten Threads werden
beendet.
SCODE tl_thread_msg(SWORD id, SWORD msg);
Schickt an den Thread mit ID id eine
Nachricht. Diese kann genau ein Word lang sein. Eine negative Zahl
veranlasst den Thread, sich zu beenden. Threads können sich
auch gegenseitig und sich selbst Nachrichten schicken. Der
Rückgabewert ist -1, wenn der Thread mit ID id nicht
existiert.
VOID tl_threads_do(VOID);
Zentrale Routine zur
Thread-Steuerung. Immer wenn das Hauptprogramm diese Routine
durchläuft, werden alle Threads nacheinander aufgerufen. Wenn
diese Routine zurückspringt sind alle Threads einmal
aufgerufen worden.
SCODE tl_thread_event(VOID);
Ähnlich wie die Event-Routinen
in GEM muss ein Thread diese Routine regelmäig aufrufen. Der
Threadmanager springt daraufhin zum nächsten Thread und
ermöglicht so ko-optives Multitasking. Der Thread bekommt OK
zurückgeliefert oder erhält eine negavtive Zahl, was
bedeutet, dass er sich beenden soll (einfach mit "return"
zurückspringen). Eine positive Zahl ist eine eingetroffene
Nachricht.
Beispiel in C
Aufruf von init_thread():
stat = init_thread(10,1024); /* Fordert Speicher für 10 Threads
a 1024 Bytes an. */
if (stat < 0) return; /* Bei Fehler Modul verlassen */
Installieren von Threads (Dies kann jederzeit, auch aus einem
Thread heraus, geschehen):
id1 = thread_install (XPOINT routine) /* routine als Thread eintragen */
Aufruf der Threads (am einfachsten mit tl_check() gekoppelt in
einer Schleife):
while (!tl_check()) /* solange geschont werden soll */
{
{...} /* das Modul tut irgendwas */
do_threads(); /* Threads abarbeiten */
{...} /* weiterer Modulcode */
}
Am Ende Thread-Speicher wieder freigeben:
exit_threads();
Ein Thread sieht gewöhnlicherweise so aus:
VOID routine1(VOID)
{
SWORD a; /* Variablendefinitionen etc */
a = 100; /* Initialisierung */
while (a>0)
{
a--;
if (event_thread()<0) break; /* Die Eventroutine, ob sich der
Thread beenden soll */
}
return; /* Thread beenden, wenn er seinen
Zweck erfüllt hat */
}
Dieser Thread zählt einfach die Variable a von 100
herunter.
Zu beachten ist, dass Threads Variablen nicht als
static definieren dürfen, da es sonst zu Problemen kommt,
wenn der selbe Thread mehr als einmal zur gleichen Zeit läuft.
Variablen, auf die Threads zugreifen sollen, müssen
gölobal definiert sein.
Ein einfaches Beispielmodul findet sich in den Sourcen.