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