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:
Drei Beispiele verdeutlichen hoffentlich den Sachverhalt:
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.
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.
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.
SCODE tl_threads_init (SWORD anzahl, ULONG stack_len);
VOID th_threads_exit(VOID);
SWORD tl_thread_install(XPOINT routine);
VOID tl_threads_stop(VOID);
SCODE tl_thread_msg(SWORD id, SWORD msg);
VOID tl_threads_do(VOID);
SCODE tl_thread_event(VOID);
stat = init_thread(10,1024); /* Fordert Speicher für 10 Threads
a 1024 Bytes an. */
if (stat < 0) return; /* Bei Fehler Modul verlassen */
id1 = thread_install (XPOINT routine) /* routine als Thread eintragen */
while (!tl_check()) /* solange geschont werden soll */
{
{...} /* das Modul tut irgendwas */
do_threads(); /* Threads abarbeiten */
{...} /* weiterer Modulcode */
}
exit_threads();
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.
| Web-Blaster V2.21 |
|
||
|---|---|---|---|
|
|||