Globaler Timer

Hallo in die Runde.
Ich habe mich (mal wieder) dazu durchgerungen von REALStudio 2010 auf Xojo umzusteigen. Dabei ist mir aufgefallen, dass ich in eine Falle getappt bin die bisher nicht auffiel. Man darf in Threads keine GUI-Ausgaben machen. Auch nicht in Methoden, die vom Thread aufgerufen werden. :frowning:
Jetzt habe ich aber eine Routie, die bei Fehlern angesprungen wird, ein entsprechendes Protokoll schreibt und einen Hinweis ausgibt. Letzteres ist leider ein Problem.
Ich suche also eine Möglichkeit, einen Timer global in Aplication anzulegen, den ich bei Bedarf auf Mode=1 setze. Da hier kein GUI-Fenster vorhanden ist, kann ich aber keinen Timer hineinziehen. Wie macht Ihr das?

Gruß, Stefan Mettenbrink.

Du kannst einen Timer jederzeit als normale Property erstellen. Den mangels graphischer Umsetzung nicht erreichbaren Action-Event sprichst du an, indem du ihn via AddHandler myTimer.Action, AddressOf TimerActionMethode umlenkst.

P.S.: Die “Falle” ist im ĂŒbrigen den OS-APIs geschuldet. Cocoa erlaubt keinen Zugriff auf UI-Elemente aus Threads mehr, wie man unter Carbon noch durfte. Ganz plausibel, wenn man sich ĂŒberlegt, was entstĂŒnde, wenn mehrere Threads gleichzeitig ein Control verĂ€ndern wollen.

P.P.S: Schau dir auch mal Xojo.Core.Timer an. Da gibt es den Befehl CallLater, mit dem du eine Methode verzögert (das Delay kann auch 0 sein) vom Main-Thread aus anspringst. Das kann das Anlegen eines externen Timers ersparen, wenn es nur darum geht, wieder sicher die GUI Ă€ndern zu können, also kein mehrfaches AusfĂŒhren nötig ist.

[quote]
Edited 2 minutes ago by Ulrich Bogun

Du kannst einen Timer jederzeit als normale Property erstellen. Den mangels graphischer Umsetzung nicht erreichbaren Action-Event sprichst du an, indem du ihn via AddHandler myTimer.Action, AddressOf TimerActionMethode umlenkst.[/quote]

Das verstehe ich nicht.
Bisher habe ich den Timer immer als GUI-Element in das Fenster gezogen. Das geht hier ja nicht. Per KontextmenĂŒ kann ich zwar einen Event-Handler hinzufĂŒgen, dort wird aber kein Timer angeboten.

Hast Du mal einen Anleitung fĂŒr AnfĂ€nger?

Gruß, Stefan Mettenbrink.

https://dl.dropboxusercontent.com/u/21200221/Xojo/Timer%20als%20Property.zip

Dass der Timer als GUI-Element vorliegt, ist eine Convenience-Geschichte von Xojo. Ein Timer ist natĂŒrlich nur Code und hat keine graphische Gestalt. Durch seine Darstellung als Control wird es einfacher, ihn so zu benutzen, wie du es bislang getan hast.

Aber er ist ebenso einfach als Property anlegbar. Da du dann nicht per Inspector an seinen Action-Event kommst, musst du diesen von anderer Stelle (z.B. dem OpenEvent des Fensters oder der App) aus verbiegen. Du findest beide beschriebenen Möglichkeiten im App-Open-Event.

Ich hab ein paar Worte darĂŒber hier verloren. Gib gerne Bescheid, falls noch was zum VerstĂ€ndnis fehlt.

Ich denke, ich habe es verstanden. Derzeit baue ich es gerade um und werde spter testen.

Danke fr die Untersttzung!

Gru, Stefan Mettenbrink.

WofĂŒr ist ind TimerActionMethod die Zeile:
#pragma unused t

gedacht?

Gruß, Stefan Mettenbrink.

Habe ich selbst herausgefunden.