seltsamer effekt bei timer-benutzung

Für allgemeine Fragen zur Programmierung mit PureBasic.
upgrader
Beiträge: 8
Registriert: 04.06.2008 15:35

seltsamer effekt bei timer-benutzung

Beitrag von upgrader »

innerhalb einer größeren Schleife möchte ich eine Abbruchmöglichkeit haben. Dazu habe ich folgendes codiert:

Code: Alles auswählen

Define.l  timewin

   OpenWindow(1, 0, 0, 100, 20, "T=", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar)
   timewin = WindowID(1)
   ShowWindow_(timewin, #SW_SHOWMINIMIZED)
   


   Repeat
      Beep_(1000,200)   ; Abbruch möglich
      ShowWindow_(timewin, #SW_RESTORE)
      SetWindowPos_(timewin, #HWND_TOPMOST | #HWND_TOP, DesktopMouseX()-30, DesktopMouseY()-50, 100, 100,#SWP_SHOWWINDOW)
   
      While WindowEvent() <> 0: Delay(1): Wend                  ; queue leeren
      SetTimer_(timewin, 1, 3000, 0)  

Debug "start timer"

      Delay(200)
      ; Zeit lassen um eventuell abzubrechen durch RightClick
      Repeat
          Event      = WaitWindowEvent()
          eventwin.l = EventWindow()
          eventtype.l  = EventType() 

Debug "lauf timer    Event="+Str(Event)+"    "+ "     " + Str(eventwin) + "   " + Str(eventtype) + "   " + Str(#PB_EventType_RightClick)

          If Event = #WM_RBUTTONDBLCLK  :  CallDebugger: : EndIf  ;#WM_RBUTTONDBLCLK = 518 
          Delay(1)
      Until Event = #WM_TIMER 

      KillTimer_(timewin, 1)  

Debug "stop timer"

      While WindowEvent() <> 0: Delay(1): Wend                  ; queue leeren
    ;  ShowWindow_(timewin, #SW_SHOWMINIMIZED)   ;[color=red]<<< HIER GUCKEN![/color]
   
    ForEver
Am debug output kann man schön sehen wie es läuft: 3 Sekunden verzögerung in denen man abbrechen kann.
ABER: macht man den Kommentar vor dem letzten "ShowWindow" weg, dann rauscht er einfach durch. Keine Ahnung warum.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Bevor jemand das testet, sollte er alle offenen Dokumente speichern!
Ansonsten kanns zu Datenverlust führen!
Ich glaube ja nicht das der Autor dieses Threades haftet :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Beitrag von rolaf »

ts-soft hat geschrieben:Bevor jemand das testet, sollte er alle offenen Dokumente speichern!
Ansonsten kanns zu Datenverlust führen!
Ich glaube ja nicht das der Autor dieses Threades haftet :mrgreen:
Was :o werden jetzt hier schon Schadcodes veröffentlicht? :freak:
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ich schätze eher, das das ding sich komplett aufhängt...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
upgrader
Beiträge: 8
Registriert: 04.06.2008 15:35

Beitrag von upgrader »

Kann mich mal jemand genauer aufklären??
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Falo hat geschrieben: Was :o werden jetzt hier schon Schadcodes veröffentlicht? :freak:
Ich schätze mal, da hat sich einer extra neu angemeldet, um diesen Scherz
zu posten.
Das kleine, der Maus folgende Fenster macht es fast unmöglich einen Button
zu drücken, so das man zwar den Taskmanager aufrufen, aber dort nur sehr
schwer etwas beenden kann.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
upgrader
Beiträge: 8
Registriert: 04.06.2008 15:35

Beitrag von upgrader »

Nee das ist kein scherz. Das window soll ja verschwinden, aber wenn der dazu gehörige "showwindow" ausgeführt wird, dann läuft der timer nicht.
ausserdem kann man ja mit doppel-right-click die schleife beenden.
upgrader
Beiträge: 8
Registriert: 04.06.2008 15:35

Beitrag von upgrader »

:praise: Entschuldigt wenn der code probleme machte. Das mit dem doppel-right-click steht nur im code. Sorry.
Darf ich die Frage mal so formulieren: Warum läuft der 3-sekunden timer sofort ab, wenn hinter der waitwindowevent() schleife das timer-window
minimiert wird?
Vielleicht erbarmt sich jemand, der die Antwort weiß?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Der Code sieht scheußlich aus, muß gesagt werden.
SetTimer_ gehört nichts in die Event-Schleife, sondern davor. TimerCallback
nutzen, nicht in der Event-Schleife, da PB ja selber einen Timer dort
verwaltet (siehe opt. Parameter für WaitWindowEvent(timeout)

SetWindowState statt API.

Ob das den Fehler beseitigt kann ich aber nicht sagen :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
upgrader
Beiträge: 8
Registriert: 04.06.2008 15:35

Beitrag von upgrader »

Danke. Meine Entschuldigung angenommen.
Der code wird etwas durch das forum-format verzerrt.
Mit PB Funktionen geht es leider auch nicht. Ich bin ja schon deshalb auf APIs gekommen, weil PB kein forgeschrittenes window-handling zulässt, z.B. Zugriff auf windows anderer threads.
Ich versuch mal die messages direkt zu behandeln. Mal sehen.
Antworten