Problem mit Timer (gelöst)

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
MUDHead
Beiträge: 107
Registriert: 08.09.2004 11:00
Wohnort: Berlin

Problem mit Timer (gelöst)

Beitrag von MUDHead »

Hi

Ich bin gerade dabei, einen kleinen Screenshotmanager ( :mrgreen: )
zu schreiben.
Der folgende Code funzt auch eigentlich, aber
ich hab 100% CPU-Auslastung. :freak:
D.h. man kann es bei keinem Spiel im Hintergrund laufen lassen. :cry:

Was hab ich falsch gemacht ?
(bestimmt den Timer falsch angewendet, denk ich mal)`

Code: Alles auswählen

Global Speicher.l 
Speicher = 1
Zufallsname.l
Bilderanzahl.l = 0

Procedure Screenshot(ImageNr,x,y,Width,Height) 
   hImage = CreateImage(ImageNr,Width,Height) 
   hDC    = StartDrawing(ImageOutput()) 
   DeskDC = GetDC_(GetDesktopWindow_()) 
   BitBlt_(hDC,0,0,Width,Height,DeskDC,x,y,#SRCCOPY) 
   StopDrawing() 
   ReleaseDC_(GetDesktopWindow_(),DeskDC) 
  ProcedureReturn hImage 
EndProcedure

Procedure gadgetname()
  
  Speicher + 2
   
EndProcedure 


OpenWindow(0,0,0,200,200,#PB_Window_Invisible,"")

   StartTimer(1,2000,@gadgetname())
 
Repeat 
   
   Zufallsname = Random(99999)
   Name$ = Str(Zufallsname)
      
    For a = 0 To 150 Step 3
      If Speicher = a
    
        Screenshot(0, 0, 0, 1024, 768)
        SaveImage(ImageNr, "C:\" + Name$ + ".bmp")
        Speicher + 1
        Bilderanzahl + 1
        
      EndIf 
    Next 
   
    If Bilderanzahl = 10
      End
    EndIf 
    
  ForEver
Zuletzt geändert von MUDHead am 15.10.2004 16:20, insgesamt 1-mal geändert.
Malus, qui potest rerum cognoscere.
Benutzeravatar
Franky
Beiträge: 1132
Registriert: 29.08.2004 16:31
Wohnort: Münsterland
Kontaktdaten:

Beitrag von Franky »

Bow, da kann man die 100% verstehen /:->

Du hast doch garkein waitwindowevent() drin, dann läuft es und läuft und läuft

Also

Den Timer hast du völlig falsch angewand, du musst (oder, solltest)
Es so machen, dass du die Procedure mit dem Screenshot machen direkt in den Timer einbaust, also etwa so (ich hab das nur zusammenkopiert aus deinem Source, musst halt bisl rumschrauben)

Code: Alles auswählen

Global Speicher.l
Speicher = 1
Zufallsname.l
Bilderanzahl.l = 0

Procedure Screenshot(ImageNr,x,y,Width,Height)
   hImage = CreateImage(ImageNr,Width,Height)
   hDC    = StartDrawing(ImageOutput())
   DeskDC = GetDC_(GetDesktopWindow_())
   BitBlt_(hDC,0,0,Width,Height,DeskDC,x,y,#SRCCOPY)
   StopDrawing()
   ReleaseDC_(GetDesktopWindow_(),DeskDC)
  ProcedureReturn hImage
EndProcedure

Procedure gadgetname()
   Zufallsname = Random(99999)
   Name$ = Str(Zufallsname)
        
        Screenshot(0, 0, 0, 1024, 768)
        SaveImage(ImageNr, "C:\" + Name$ + ".bmp")
        Speicher=Speicher + 1
        Bilderanzahl=Bilderanzahl + 1
       
   
    If Bilderanzahl = 10
      End
    EndIf   
EndProcedure


OpenWindow(0,0,0,200,200,#PB_Window_Invisible,"")

   StartTimer(1,2000,@gadgetname())
 
Repeat
   waitwindowevent()   
  ForEver
So macht das ding alle 2 sekunden einen Screenshot, wenn ich das richtig
überblicke.

kannst du mal n bissen erklären, was das mit der forschleife und dem speicher+ 2 soll, vielleicht kann ich dir das dann auch noch einbauen
Falsch zugeordnetes Zitat des Tages: "O'zapft is" - Edward Snowden :)
Benutzeravatar
MUDHead
Beiträge: 107
Registriert: 08.09.2004 11:00
Wohnort: Berlin

Beitrag von MUDHead »

Den Timer hast du völlig falsch angewand
wusst ichs doch.

Code: Alles auswählen

Procedure gadgetname() 
   Zufallsname = Random(99999) 
   Name$ = Str(Zufallsname) 
        
        Screenshot(0, 0, 0, 1024, 768) 
        SaveImage(ImageNr, "C:\" + Name$ + ".bmp") 
        Speicher=Speicher + 1 
        Bilderanzahl=Bilderanzahl + 1 
        
    
    If Bilderanzahl = 10 
      End 
    EndIf    
EndProcedure 
Das hab ich gebraucht, danke. :D


Zu dem WaitWindowEvent() und der Forschleife:
Ich hab heute die ganze Zeit immer hin und herprobiert mit verschiedenen Lösungen. Zum Schluss hatte ich, glaub ich, keinen Überblick mehr.
(die eine Prozedur heißt noch "gadgetname")
Ich hätte ganz neu anfangen sollen, dann hätte ichs vielleicht selber geschafft. :twisted:


Auf jeden Fall danke für die schnelle Hilfe. :D
Malus, qui potest rerum cognoscere.
Antworten