2 Timer gleichzeitig

Anfängerfragen zum Programmieren mit PureBasic.
pede
Beiträge: 90
Registriert: 08.07.2007 20:37
Wohnort: brixen / Italien

2 Timer gleichzeitig

Beitrag von pede »

Hallo

Für mein aktuelles Projekt brauch ich in manchen Fälle 2 Timer die gleichzeitg laufen, und dann bei Ablauf von der uElapse Zeit ein Fenster öffnen...

vereinfacht schaut das so aus...

Code: Alles auswählen

Procedure timer_1(hwnd, uMsg, idEvent, dwEvent)
    ;Static uMsg
    ende_window_1 = 0
    KillTimer_(hwnd, 10)
    OpenWindow(1, 100, 100, 200, 200, Str(idEvent) + "  " +  Str(uMsg))
    StickyWindow(1, 1)
    Repeat 
       event =WaitWindowEvent() 
       Select Event
          Case #PB_Event_CloseWindow
                  ende_window_1 = 1
          EndSelect   
    Until ende_window_1 = 1 
    CloseWindow(1)
    ;KillTimer_(hwnd, 10)
EndProcedure

Procedure timer_2(hwnd, uMsg, idEvent, dwEvent)
    ;Static uMsg
    ende_window_2 = 0
    KillTimer_(hwnd, 20)
    OpenWindow(2, 500, 500, 200, 200, Str(idEvent) + "  " +  Str(uMsg))
    StickyWindow(2, 1)
    Repeat 
     event =WaitWindowEvent() 
     Select event
        Case #PB_Event_CloseWindow
            ende_window_2 = 1
     EndSelect
    Until  ende_window_2 = 1
    CloseWindow(2)
    
EndProcedure

ende = 0
hwnd = OpenWindow(0, 100, 100, 500, 500, "Timer")
SetTimer_(hWnd, 10, 5000, @timer_1())
SetTimer_(hWnd, 20, 10000, @timer_2())

Repeat
    event = WaitWindowEvent()
    Select event
        Case #PB_Event_CloseWindow
            Ende = 1
           
    EndSelect

Until ende = 1
klappt bis jetzt auch ganz gut,
nur ein Problem besteht noch, und zwar wird ja window 1 vor window 2 geöffnet...
wartet man bis beide Fenster offen sind, und versucht dann Window 1 zu schließen, dann wird window 2 geschlossen, nicht window 1...

wie kann ich das umgehen?
"oh... ein Sarkasmus-Detektor... ein wirklich nützliches Gerät" .. dit.. dit.. ditditdit.. *bumm*
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Immer nur eine Eventschleife benutzen :

Code: Alles auswählen


Enumeration 
	#timer1
	#timer2
EndEnumeration

Enumeration 
	#win1
	#win2
	#win3
EndEnumeration


Procedure callback(hwnd,umsg,wparam,lparam)

	If umsg = #WM_TIMER
	
		Select wparam
			Case #timer1
				OpenWindow(#win2, 100, 100, 200, 200, Str(wparam) )
    			StickyWindow(#win2, 1) 
			Case #timer2
				OpenWindow(#win3, 500, 500, 200, 200, Str(wparam) )
    			StickyWindow(#win3, 1) 
		EndSelect
		
		KillTimer_(hwnd,wparam)
	EndIf 

	ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

hwnd = OpenWindow(#win1, 100, 100, 500, 500, "Timer")
SetWindowCallback(@Callback(),0)

SetTimer_(hWnd, #timer1, 500 , 0)
SetTimer_(hWnd, #timer2, 2000, 0)

Repeat
   event 	= WaitWindowEvent()
	eventwin = EventWindow()
	
	Select eventwin
	
		Case #win1 ; eventhandling fenster 0
		
			If event = #PB_Event_CloseWindow
				End 
			EndIf 
		
		Case #win2 ; eventhandling fenster 1
		
			If event = #PB_Event_CloseWindow
				CloseWindow( #win2 )
			EndIf 
		
			SetTimer_(hWnd, #timer1, 500 , 0)
		
		Case #win3 ; eventhandling fenster 2
		
			If event = #PB_Event_CloseWindow
				CloseWindow( #win3 )
			EndIf 
			
			SetTimer_(hWnd, #timer2, 2000, 0)
			
	EndSelect
	
ForEver  
pede
Beiträge: 90
Registriert: 08.07.2007 20:37
Wohnort: brixen / Italien

Beitrag von pede »

super danke :allright:

jedoch funktioniert es nicht wenn ich es so mach wie du...

Code: Alles auswählen

SetWindowCallback(@Callback(),0) 

SetTimer_(hWnd, #timer1, 500 , 0) 
SetTimer_(hWnd, #timer2, 2000, 0)
hier wird kein Timer gekillt...^^

wenn ich so mach, funktionerts wie erwünscht:

Code: Alles auswählen

;SetWindowCallback(@Callback(),0) 

SetTimer_(hWnd, #timer1, 5000 , @callback()) 
SetTimer_(hWnd, #timer2, 10000, @callback())
ich versteh aber ehrlich gesagt nicht, wieso dein code nicht wie gewünscht funktioniert....

edit:
UUPS, hab erst jetzt gesehen, dass du 2 weitere SetTimer drinhast
:oops: sry
"oh... ein Sarkasmus-Detektor... ein wirklich nützliches Gerät" .. dit.. dit.. ditditdit.. *bumm*
Antworten