Aktuelle Zeit: 18.07.2019 15:12

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: waitwindowevent() unerklärlicher event
BeitragVerfasst: 03.05.2019 09:44 
Offline
Benutzeravatar

Registriert: 19.03.2015 18:16
Wohnort: Altenstadt
HI,

folgender code liefert auf PB-win7-64bit immer den event #pb_event_timer (dezimal15). Jedoch nicht auf PB-Mac-64bit

Code:
hd_timer=2000
Debug    #PB_Event_Timer
Repeat
 
  AddWindowTimer(Window_hd,1,hd_timer)
  event = WaitWindowEvent(); timeout = Abfragezeitspanne für Vitaldaten
  RemoveWindowTimer(Window_hd,1)
  Debug event
 
  eventmenu=EventMenu()
  eventtype=EventType()
  eventwindow=EventWindow()
 
  Debug eventwindow
  Debug window_hd
  If event=#PB_Event_Timer
    eventtimer=EventTimer()
    Debug "hd_timer_timerevent"
  EndIf
 
  StartVectorDrawing(CanvasVectorOutput(Canvas_0_hd))
  StopVectorDrawing()
Forever


Lasse ich die beiden Vector-Befehle weg, kommt der timer event.
Beim ersten Durchlauf der schleife kommt der timer-event. Danach kommt (nach time_out timer_hd) immer der event dezimal 4 (welcher ist das?)
(vorausgesetzt natürlich dass ich nix mache. Bewege ich die Maus oder so, kommen ohne time_out sofort andere events, die ich aber nicht geprüft habe)
Das Canvas_0_hd existiert im window_hd.

Warum ist das auf Mac anders als auf Win7?

Und welcher event ist der dezimal 4?

Probiert mit PB5.62 und PB5.70. Beide zeigen gleiches Verhalten. XCODE ist aktualisiert(10.1). MacOS10.13.6

Edit by NicTheQuick: Code-Tags gesetzt

_________________
Gruß
Manne
http://zes.kart-mal-anders.de
PB5.6 WIN XP,W7,W8 & Mac Yosemite


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: waitwindowevent() unerklärlicher event
BeitragVerfasst: 03.05.2019 10:58 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Du nutzt den WindowTimer falsch oder ich verstehe nicht, was du damit vor hast.

Den Timer erstellt man in der Regel nur einmal und wartet dann auf die wiederkehrenden Events bis man ihn wirklich nicht mehr braucht und dann eben wieder löscht. Schau dir dazu das Beispiel in der Hilfe an. Aus irgendeinem Grund erstellst du den Timer, wartest auf ein beliebiges Event und löschst ihn direkt wieder. Da in einer Fensteranwendung in der Regel eine Menge Events auftreten, wird dein Timer vermutlich erstellt und direkt wieder gelöscht bevor der Timerevent überhaupt auftreten konnte.

Ansonsten freuen sich die meisten Helfer hier, wenn sie einen lauffähigen Code bekommen, den sie nur kopieren und einfügen müssen. In deinem Fall fehlt noch einiges drum herum um direkt mit dem Testen deines Beispiels loslegen zu können.

_________________
Freakscorner.de - Der Bastelkeller | Neustes Video: Neje DK - 1 Watt Laser Engraver
Ubuntu Gnome 18.04.1 LTS x64, PureBasic 5.60 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: waitwindowevent() unerklärlicher event
BeitragVerfasst: 03.05.2019 11:24 
Offline
Benutzeravatar

Registriert: 04.08.2009 17:24
Mach dir keine Gedanken, welche Events geschossen werden. Windows selbst löst auch Events auch, die nirgends dokumentiert sind.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: waitwindowevent() unerklärlicher event
BeitragVerfasst: 03.05.2019 14:30 
Offline
Benutzeravatar

Registriert: 19.03.2015 18:16
Wohnort: Altenstadt
HI,

ob richtig benutzt oder nicht, hängt sicher auch davon ab, was ich erreichen möchte. Ich möchte eine Hauptschleife, die sofort auf div. Eingabe"-events (Mausklick, Tastatur, Fenstercshließen, etc.) und(!) nin gewissen Zeitabständen eigenständig reagiert. Ich benutzt mehr, als einen timer. Je nach Event werden unterschiedlich lange Aufgaben erledigt. Setzte ich einen einmaligen timer, müßte der länger sein, als die max. Ausführungszeit der längsten Aufgabe. Das ist aber auf jedem PC nun mal anders lang. Setz ich die zu lang, freuen sich die PC-Nutzer mit highend-Rechnern, weil die applikation vor sich hinschnarcht oder die mit den 500MHz-XP-Werkstattrechnern, die die Applikation gar nicht erst zum Laufen kriegen.
Setz ich ein timeout in waitwindowevent(time_out), weiß ich nach dem event nicht, welcher timer das war. Insofern - glaube ich, dass meine Lösung nicht so schlecht ist, da sie immer einen gewissen zeitbereich nicht aktiv ist, also dem System auch CPU-Zeit läßt. Spielt auch keine Rolle, denn bisher hat das bisher auf WIN und MACOX so funktioniert. Ich weiß nicht seit wann genau, aber aktuell mit PB5.62 und MacOS10.13.6 und XCODE10.1 läuft's eben nicht.
WIN bringt den event "4" gar nicht, MacOSX schon.

Ja, klar ist das hier einfügen eines lauffähigen codes sinnvoll. Da mein Programm nun schon sehr lang ist, nehme ich immer die Passagen raus, die ich klar als nicht erforderlich schon "rausprobiert" hab.

Aber gern: hier der code, der vollständig das unterschiedliche Verhalten zeigt:
Zitat:
Window_hd = OpenWindow(#PB_Any, 100, 100, 200, 200, "", #PB_Window_SystemMenu)
Canvas_0_hd = CanvasGadget(#PB_Any, 10, 10, 90, 90)
hd_timer=2000
Debug #PB_Event_Timer
Repeat

AddWindowTimer(Window_hd,1,hd_timer)
event = WaitWindowEvent(); timeout = Abfragezeitspanne für Vitaldaten
RemoveWindowTimer(Window_hd,1)
Debug event

eventmenu=EventMenu()
eventtype=EventType()
eventwindow=EventWindow()

Debug eventwindow
Debug window_hd
If event=#PB_Event_Timer
eventtimer=EventTimer()
Debug "hd_timer_timerevent: "+Str(eventtimer)
EndIf

StartVectorDrawing(CanvasVectorOutput(Canvas_0_hd))
StopVectorDrawing()

Until event=#PB_Event_CloseWindow
End

_________________
Gruß
Manne
http://zes.kart-mal-anders.de
PB5.6 WIN XP,W7,W8 & Mac Yosemite


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: waitwindowevent() unerklärlicher event
BeitragVerfasst: 03.05.2019 15:00 
Offline
Benutzeravatar

Registriert: 19.03.2015 18:16
Wohnort: Altenstadt
HI,
Zitat:
Da in einer Fensteranwendung in der Regel eine Menge Events auftreten, wird dein Timer vermutlich erstellt und direkt wieder gelöscht bevor der Timerevent überhaupt auftreten konnte.


Das könnte stimmen, denn wenn ich den timer einmalig vor der schleife setze und nie remove, kommt der timer_event immer.

Zudem sieht man im debugfenster, dass
    hd_timer_timerevent: 1
    275
    3679456
    3679456
    13110
    3679456
    3679456
    hd_timer_timerevent: 1
    275
    3679456
    3679456
    13110
    3679456
    3679456
    hd_timer_timerevent: 1

13110 wohl der timer_event ist und 275 irgedwas anderes. Auf Macosx sind äquivalent 15 der timer und 4 irgendwas anderes. Der 15 kommt nur, wenn die canvas-zeilen auskommentiert sind. Insofern... werde ch mir als gedanken machen, wie ich das mit den zwei timern macos-kompatibel lösen kann...
Danke für die Hilfe und den Anschub für's Denken :-)

_________________
Gruß
Manne
http://zes.kart-mal-anders.de
PB5.6 WIN XP,W7,W8 & Mac Yosemite


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: waitwindowevent() unerklärlicher event
BeitragVerfasst: 03.05.2019 15:39 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Ich glaube hier geht es um ein grundsätzliches Problem. Es ist eigentlich keine gute Lösung mittels Polling zu überprüfen, ob Aufgaben abgeschlossen wurden. Erklär doch mal etwas genauer was du da für Aufgaben hast und wie du die überhaupt im Hintergrund abarbeitest. Nutzt du Threads oder rufst du externe Programme dafür auf? Mit etwas mehr Hintergrund können wir dir vielleicht noch besser helfen und dir einen eleganteren Lösungsansatz anbieten.

Ansonsten ist die Sache mit dem erstellen und direkt Löschen des Timers weiterhin Murks. Denn jede Mausbewegung auf dem Fenster, jedes Refresh-Events, Minimieren, Maximieren, und vieles mehr erzeugt Events, wodurch WaitWindowEvent() einen Wert zurück gibt und daraufhin dein Timer gelöscht wird. Das ergibt keinen Sinn.

_________________
Freakscorner.de - Der Bastelkeller | Neustes Video: Neje DK - 1 Watt Laser Engraver
Ubuntu Gnome 18.04.1 LTS x64, PureBasic 5.60 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: waitwindowevent() unerklärlicher event
BeitragVerfasst: 03.05.2019 15:49 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Ich weiss auch nicht was das für langfristige aufgaben sind...

Aber die Event-Schleife sollte nur kurzfristige Aufgaben erledigen weil sonst die GUI hängt.
Langfristige Aufgaben man bestens in Threads auslagern, wie grosse Dateien laden und auswerten oder Datenbankbearbeitungen.

Wichtig ist aber das GUI-Element bei MacOS und Linux nur im Hauptprogramm (WaitWindowEvent() geändert werden dürfen.
Dazu verwende ich das Modul ThreadToGUI um Gadgets aus Threads zu ändern. Listen hinzufügen, etc.
Siehe viewtopic.php?f=8&t=29728

Beispiel: viewtopic.php?f=21&t=30246&p=341476#p341476

_________________
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Zuletzt geändert von mk-soft am 03.05.2019 15:55, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: waitwindowevent() unerklärlicher event
BeitragVerfasst: 03.05.2019 15:52 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Schau mal nach den PB_Event_XXX

4 ist PB_Event_Repaint

_________________
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: waitwindowevent() unerklärlicher event
BeitragVerfasst: 07.05.2019 18:18 
Offline

Registriert: 29.08.2004 13:18
Eventuell ein kleines Verständnisproblem. Aber man nutzt halt auch Konstanten, weil die sich von Betriebsystem zu Betriebsystem ändern können.
Und auch wichtig, zum Teil kommen hier auch ungefiltert die Systemnachrichten durch, sprich es gibt durchaus events, für die es keine Konstanten gibt.

_________________
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: waitwindowevent() unerklärlicher event
BeitragVerfasst: 22.05.2019 16:19 
Offline
Benutzeravatar

Registriert: 19.03.2015 18:16
Wohnort: Altenstadt
HI,

diese zeitintensiven Aufgaben sind grafische Ausgaben.

Mit threads hab ich noch nicht gearbeitet. Da muß ich noch lernen, was deren Sinn ist, was die so alles könn(t)en und wie man das richtig verwendet.

Danke für die Hilfe. hab jetzt den Teiler permanent in der Hauptschleife. Das geht. Ob's aber ein "guts System" so ist, naja...

_________________
Gruß
Manne
http://zes.kart-mal-anders.de
PB5.6 WIN XP,W7,W8 & Mac Yosemite


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye