[archimedes] Re: Wie richtig auf Reason-Codes reagieren?

  • From: Carlos Michael Santillan <ml-archimedes@xxxxxxxxxx>
  • To: archimedes@xxxxxxxxxxxxx
  • Date: Sat, 25 Oct 2014 11:48:52 +0200

On 25 Oct 2014  Alexander Ausserstorfer <bavariasound@xxxxxxxxxxxxxxx>
wrote:
>>>  wimp_poll_flags mask=0;
>>>  do {
>>>    event = wimp_poll(mask, &block, NULL);
>>>  } while (event == wimp_NULL_REASON_CODE);
>>>
>>>  return 0;
>>
>> Was passiert wenn das Programm ein Symbol auf der Iconbar hat und man
>> dann draufklickt?
>
>Soweit bin ich momentan noch nicht.

Mit dem Kode da oben, der ja längst korrigiert wurde, würde das Programm
beendet, da das Klickereignis nicht 0 (No Reason) ist. Dito wenn man
eine Datei auf das Symbol fallen läßt usw. Alle Ereignisse die kommen
und nicht No Reason sind, führen zum Beenden.


>> Warum muss RISC OS _jedes Mal_ wenn nichts anderes zu tun ist in die
>> do/while Schleife springen? In der Zeit könnte ein anderes Programm
>> etwas sinnvolles tun. Mit einer vernüftigen Maske übergibt RISC OS dem
>> Programm erst die Kontrolle, wenn eins der erwünschten Ereignisse (siehe
>> Maske) für das Programm kommt.
>
>Wenn das Programm eine Aufgabe erledigen soll, welche keine
>Kommunikation mit dem Anwender erfordert, gibt es dieses Ereignis nicht,
>denke ich.

Wenn Du den Benutzer daran hindern kannst auf das Symbol zu klicken
usw., stimmt das. Zieh Mal eine Datei auf den Switcher. Das ist sinnlos,
weil nichts passiert. Aber es ist möglich und erzeugt in Richtung dem
"Programm Switcher" ein Ereignis. Aber Acorn wird da schon mit der Maske
gearbeitet haben und das "Programm Switcher" wird davon nichts
mitbekommen.

Mit der Maske teilt man RISC OS mit welche Ereignisse das Programm
behandeln möchte. Alle anderen Ereignisse werden schon von RISC OS nicht
an das Programm weitergereicht. Also alle unerwünschten Ereignisse sind
schnell abgegessen. Wenn man nicht auf Klicks reagieren möchte, dann
wird das Programm nicht "belästigt" und verbraucht damit auch nicht
unnötig Rechenzeit.

Wenn Du in PRM 3 Seite 115 oder dem StrongHelp Handbuch Wimp (Wimp /
Poll) schaust siehst Du einige mögliche Ereignisse (Reason Codes). Wenn
ich mich beim StrongHelp Handbuch nicht verzählt habe, dann sind es 19.

Bei einigen dieser Ereignisse muss man noch mehr auswerten. Bei einen
Mausklick muss noch herausgefunden werden welche Taste gedrückt wurde.

Ein besonderes Ereignis ist No Reason (0). Da liegt keine Aktion
(Mausklick, Fensteraktion usw.) vor. Dann gibt RISC OS dem Programm die
Kontrolle. Sprich das Programm wurde die CPU zugeteilt und darf
arbeiten. Dieses Ereignis sollte sehr, sehr oft vorkommen. Zumindest,
wenn die anderen Programme Multitaskingprogramme sind.

Wenn das Programm aber überhaupt nicht auf dieses Ereignis reagiert,
weil es zum Beispiel auf einen Mausklick wartet, dann ist das
Verschwendung von Rechnenzeit. Bei einen Programm kein großes Problem,
hat man aber viele solcher Programm am laufen wird der Rechner, gerade
bei alter Hardware, reaktionsunfreudig. Und das weil kein Programm
wirklich arbeitet.

Dito mit anderen "echten" Ereignissen. Wenn man nicht darauf reagieren
will, wenn jemand eine Datei auf das Programmsymbol oder -fenster zieht.

Mit der Maske teilt man RISC OS mit, welche Ereignisse man behandlen
will und welche nicht und kann damit das gesamte System
benutzerfreundlicher, also schneller, machen.

>
>Ebenfalls wird vermutlich kein Ereignis auftreten, wenn man Daten senden
>oder Berechnungen durchführen will. Aber vielleicht täusche ich mich da
>auch. Ich bin momentan noch nicht soweit.

Wenn das Programm berechnungen vornimmt, einen Datei schreibt usw. dann
gibt es kein Mulittasking und damit auch keine Ereignisse. Der Rechner
ist in der Zeit eingefroren. Wenn das z. B. nur 1/2 Sekunde dauert, ist
das kein Problem. Das ist der Unterschied zu kooperativen und
preemptiven Multitasking.

Nimm aus meinen Multitaskprogrammen das Programm Singeltask. Starte es
und versuch mal ein Fesnter zu verschieben. Bei einen schnellen Rechner
muss man eventuell rounds% und/oder work% etwas (!) erhöhen.



Carlos Michael Santillán

--
http://www.arcsite.de/
http://www.risc-os.de/

Ein Staat, in dem alle verdächtig sind, ist selbst verdächtig
A state that suspects everyone is itself suspicious

Other related posts: