AmiBlitz³
gui refresh kommt zu spaet - Druckversion

+- AmiBlitz³ (https://www.amiblitz.de/community)
+-- Forum: AmiBlitz³ (https://www.amiblitz.de/community/forum-3.html)
+--- Forum: Includes (https://www.amiblitz.de/community/forum-18.html)
+--- Thema: gui refresh kommt zu spaet (/thread-115.html)

Seiten: 1 2


Re: gui refresh kommt zu spaet - tero - 23.11.2014

Blackbird schrieb:Unter welchem OS programmierst du denn überhaupt ?
Ich bin unter WB3.9
Das NTUI noch nicht fertig ist werde ich schon nicht vergessen.
Wenn es um Dinge geht die in AIDE auch vorhanden sind, vergleich ich dort ob es da genauso reagiert.


Re: gui refresh kommt zu spaet - Blackbird - 23.11.2014

Du bist aber sparsam was deine Auskünfte angeht....

Originalhardware oder emuliert ?


Re: gui refresh kommt zu spaet - tero - 23.11.2014

Blackbird schrieb:Du bist aber sparsam was deine Auskünfte angeht....
Ups,war keine absicht. Ich hab das eben nur auf die schnelle geantwortet.
Zum programmieren nutze ich uae (030/81 128mb fast), der emuliert in etwa meinen 1200er. Nur das es schneller ist und der 1200er keine FPU hat.


Re: gui refresh kommt zu spaet - Der Wanderer - 24.11.2014

Also wenn du einen Refresh erziwngen willst, dann wäre ntui_SendEvent{*object_that_needs_refresh, #TUIEV_REFRESH} das Richtige.
Ein künstliches Notify einführen nur wegen dem Refresh ist nicht nötig/sinnvoll, im Gegenteil. Dein PostNotify muss sich ja "hinten anstellen", möglicherweise warten noch andere blockierende Notifes.

Das eigentliche Problem ist, dass du den Main Thread blockierst.

Richtig wäre, die Scan Funktion frei von Blitz Befehlen, Strings und lokalen NewTypes zu machen, weil die nicht threadsafe sind.
Dann kannst du sie asyncrhon aufrufen und dir einen Notify schicken lassen wenn es fertig ist. Die GUI bleibt dann solange responsiv.

Du kannst Threadsafety auch erzwingen wenn du es in ein eigenes Tool packst, so wie ich den AB3Scanner.
Dann kannst du diese Funktin benutzen, die ich auch in NTUI reinpacken werden, momentan ist sie direkt in AIDE definiert:

Function.l ntui_RunAsyncAndNotify{*obj.tuiObject,exe.s,params.s,outfile.s,notifyId.s,value.l,string.s}

Das ruft eine <exe> auf, mit <params> als Parameter, die Ausgabe wird in die Datei <outfile> geschrieben. Nachdem es fertig ist wird dem Objekt <*obj> ein <notifyId> mit <value> und <string> Anhang geschickt.
Sowas macht man nicht unbedingt für jede kleine Funktion, aber wenn es aufwendiger ist oder man ein 3rd party tool nutzen will ist das recht elegant.
So kann man nämlich das Tool stand-alone entwickeln und debuggen. AB3 ist wie gesagt nicht für Multithreading ausgelegt und der Debugger läuft Amok, d.h. er muss für alle Threads ausser dem Main Thread ausgeschaltet sein, und man ist sehr eingeschränkt was man machen darf.


Re: gui refresh kommt zu spaet - tero - 24.11.2014

Der Wanderer schrieb:Richtig wäre, die Scan Funktion frei von Blitz Befehlen, Strings und lokalen NewTypes zu machen, weil die nicht threadsafe sind.
Dann kannst du sie asyncrhon aufrufen und dir einen Notify schicken lassen wenn es fertig ist. Die GUI bleibt dann solange responsiv.
Das klingt für mich am sinnvollsten, ich schau mir Morgen mal an wie das zu machen wäre. Obwohl ich nicht weiß ob ich hier auf strings verzichten kann. Geht ja auch nur um ein update der Statuszeile, ich weiß nicht ob das den Aufwand wert ist. Bis ich geübter bin werd ich im zweifelsfall einfach den Uhr Mauszeiger nutzen.

Nach einem Tip von Blackbird benutze ich im moment PostnotifyWithEvent_deb, das Funktioniert gut aber die GUI ist während des scans natürlich Blockiert.

Eine externe exe zu nutzen lohnt sich hier zwar nicht, das könnte aber zukünftig noch nützlich werden.