[archimedes] Re: POP3S und "richtiges" Multitasking

  • From: Steffen Huber <steffen@xxxxxxxxxxxx>
  • To: archimedes@xxxxxxxxxxxxx
  • Date: Fri, 11 Dec 2015 10:42:56 +0100 (CET)

Hallo zusammen,

Alexander Ausserstorfer <bavariasound@xxxxxxxxxxxxxxx> hat am 11. Dezember
2015 um 01:28 geschrieben:

Normalerweise arbeitet man bei einem Multitasking-Programm (unter RISC
OS) mit einer zentralen Poll-Schleife, die immer auf irgendwelche
Benutzereingaben reagiert.

Das Ergebnis eines Wimp_Poll-Aufrufs kann mehr sein als die Rückgabe einer
Benutzereingabe - z.B. eine Message vom System oder von einer anderen
Anwendung, oder der "PollWordNonZero"-Mechanismus.

Bei meinem Programm POP3S, welches E-Mails abholt, ist sowas aber
sinnlos, da es eigentlich ohne Benutzereingaben weitgehend linear
abläuft.

Ich denke, auch ein Programm wie POP3S sollte sich auf der Iconbar
installieren. Damit brauchst Du auf jeden Fall eine Poll-Schleife,
denn das Iconbar-Menu ist Pflicht.

Wenn ich dem jetzt "richtiges" Multitasking beibringen möchte (also
nicht mehr dieses Kommando-Fenster), damit ich die ganzen Ausgaben in
Symbole / Textfelder eines Fensters schreiben kann, wie mache ich das
jetzt am besten?

Am besten einfach machen :-)

Eine Idee von mir ist ja momentan, nach _jedem_ Befehl bzw. Schritt in
eine Poll-Unterschleife zu springen, von dort aus dem Programm und
anschließend wieder zurück zum nächsten Befehl. Aber das scheint mir
doch ziemlich umständlich zu sein.

Kooperatives Multitasking ist halt etwas umständlicher als präemptives.
Aber Du bist prinzipiell auf dem richtigen Weg.

In CDVDBurn mache ich folgendes: die Event-Verarbeitung mit dem
Wimp_Poll-Aufruf steckt in einer separaten Prozedur (aka Funktion
aka Methode). Die Haupt-Poll-Schleife ruft (überraschenderweise in
einer Schleife...) diese Prozedur auf. Wenn ich nun einen langlaufenden
Prozess starte (z.B. das Brennen einer CD), dann wird an signifikanten
Stellen dieses Prozesses (z.B. nachdem ein Datenblock von der Platte
gelesen wurde, nachdem ein Datenblock an den Brenner geschickt wurde
usw.) auch die Prozedur mit dem Wimp_Poll aufgerufen.

Dadurch ist sichergestellt, dass regelmäßig andere Anwendungen zum
Zuge kommen, der Benutzer weiterhin die CDVDBurn-Fenster verschieben
kann und ggf. das Programm auch beenden kann.

Schwierig wird es nur, wenn Du zeitkritische Dinge tust und nicht mit
ausreichend großen Buffern arbeiten kannst - dann bleibt Dir eigentlich
nur der Weg eines Moduls das regelmäßig über den Ticker-Event getriggert
wird.

Willst Du mit WIMP-Mitteln z.B. Texte für den Benutzer darstellen, musst
Du das eh so machen, denn wenn Du nicht regelmäßig pollst, funktioniert
das automatische Darstellen von Icons bzw. der Redraw derselben eh nicht
richtig.

Gruß
Steffen

--
Steffen Huber LambdaComm System - Welcome to Trollinger Country
steffen@xxxxxxxxxxxx
Private homepage http://www.huber-net.de/

Other related posts: