100% cpu auslastung ausmerzen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Thorian

Betreff: 100% cpu auslastung ausmerzen

BeitragMo, März 20, 2006 12:59
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo alle zusammen
habe gestern begonnen, mir blitz anzusehen, und habe nun ein problem: meine funktion lastet die cpu zu 100% aus, was natürlich ganz und gar nicht gut ist

hier mal der code:
Code: [AUSKLAPPEN]
Graphics 640, 480, 32, 2
SetBuffer BackBuffer()
Cls
imgDraw ("test.jpg", 0, 0)
bereich (0, 74, 452, 479)

Function imgDraw (img$, x, y)  ;bild auf screen bringen
   img = LoadImage (img$)
   If img = 0 Then
      Text 100, 100, "Fehler"
   Else
      DrawImage (img, x, y)
   EndIf
End Function

; hier soll einfach nur überprüft werden, ob in einen bestimmten bereich geklickt wurde, und dann ein text erscheinen
Function bereich (minX, maxX, minY, maxY)
   While Not KeyHit (1)
      mausX = mausX + MouseXSpeed ()
      mausY = mausY + MouseYSpeed ()
      If MouseHit (1) = 1 And mausX >= minX And mausX <= maxX And mausY >= minY And mausY <= maxY Then
         imgDraw ("test", 0, 0)
         Text 10, 40, mausY
      End If   
      Flip
   Wend
End Function

WaitKey
End


funktioniert auch alles. nur eben mit voller auslastung.
habe aber nicht wirklich eine idee, wie ich die funktion umbauen kann, sodass es einwandfrei geht.

denkanstöße würden mir sehr helfen, danke auf jeden fall

Hummelpups

BeitragMo, März 20, 2006 13:12
Antworten mit Zitat
Benutzer-Profile anzeigen
->CreateTimer
->WaitTimer

www.blitzbase.de
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus

Jan_

Ehemaliger Admin

BeitragMo, März 20, 2006 13:16
Antworten mit Zitat
Benutzer-Profile anzeigen
hm, ist anundfür sich normal, wenn man volle hintergrund berechtigungen macht.
Sinnvoll ist das nur mit Blitz Plus oder Blitzmax möglich,

BB ist ebend für Spiele Programmierung.

verscuhe Delay 5 in jede schleife zu machen.
between angels and insects
 

Thorian

BeitragMo, März 20, 2006 13:17
Antworten mit Zitat
Benutzer-Profile anzeigen
timer hab ich schon versucht, aber nicht geschafft. irgendwie komm ich damit nicht klar. könntest du mir bitte zeigen, wie ich den timer richtig einsetzte?

danke

Hubsi

BeitragMo, März 20, 2006 13:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
repeat
msecs=millisecs()

; Berechnung, Ausgabe, tralala

flip 0
waittimer(gewuenschte_frames,millisecs()-msecs)
until keyhit(1)
end


Function WaitTimer(frames,time)
   wait=1000/frames-time
   If wait>0 Delay wait
   Return wait
End Function
Eine Möglichkeit Very Happy

Sehr viel besser für Spiele geeignet ist allerdings Frameunabhängig zu programmieren. In aller Regel stört sich bei einem Spiel niemand dran wenn die CPU auf Vollgas gehalten wird Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

Thorian

BeitragMo, März 20, 2006 13:40
Antworten mit Zitat
Benutzer-Profile anzeigen
danke Hubis, genau sowas hab ich gebraucht!
läuft jetzt bei 10% und funktioniert problemlos

danke an alle
 

Dreamora

BeitragMo, März 20, 2006 14:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:

Sehr viel besser für Spiele geeignet ist allerdings Frameunabhängig zu programmieren. In aller Regel stört sich bei einem Spiel niemand dran wenn die CPU auf Vollgas gehalten wird Very Happy

Doch schon. Immer mehr Leute schalten neuerdings den Kopf ein bevor sie den PC einschalten. Speziell auf Notebooks ist es katastrophal wenn Programmierer unfähig sind, nur die Ressourcen zu nutzen, die sie brauchen.
Das konnte UT schon vor Jahren, sehe nicht warums auf einmal nimmer gehen sollte.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Hubsi

BeitragMo, März 20, 2006 15:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Nun gut, von Notebooks mal abgesehen Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

Dreamora

BeitragMo, März 20, 2006 15:23
Antworten mit Zitat
Benutzer-Profile anzeigen
du kannst dir auch beim Desktop min. 60 Watt sparen wenn das Programm intelligent programmiert ist, da die CPU (zumindest AMD mit Cool'n'Quiet sowie alles mit Core) sich runtertaktet bis auf ihr Minimum oder gar Kerne in den Sleep zustand versetzt.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

x-pressive

BeitragMo, März 27, 2006 12:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Delay gibt meiner Erfahrung nach mehr Ressourcen frei, als WaitTimer. Bei meinem derzeitigen Projekt habe ich z.B. folgende Auslastungen:

Normal (ungebremst): 1500 FPS - 100%
Delay 1: 400 FPS - ca. 45%
WaitTimer: 60 FPS - ca.75% Question

WaitTimer gibt in dem Fall weniger Ressourcen ab, als Delay, obwohl das Programm nur mit einem Bruchteil an FPS läuft.

Delay ist aber wiederrum nur bei hohen Frameraten sinnvoll, also bei schnellen Rechnern, wobei dann langsamere (z.B. Laptops) immer noch eine extreme Auslastung haben.

Das Problem der CPU-Auslastung ist mit Blitz gar nicht so leicht zu lösen, weil man sein Programm ja nicht in mehrere Prozesse oder Threads aufteilen kann. Man hat ja eigentlich nur die Wahl ALLE Programmteile langsamer laufen zu lassen, oder KEINE. Man muss also immer das Programm komplett anhalten (WaitTimer, Delay), um CPU-Ressourcen abzugeben. Einige Programmteile nur alle xx MilliSecs aufzurufen bringt deshalb ja auch nichts.

Eine richtige Lösung habe ich dafür auch noch nicht gefunden Confused
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL
 

super_castle

BeitragMo, März 27, 2006 13:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Thorian , nimm purebasic. das ist glaube ich besser für deine lösung.
b3d ist für deine aufgabe zu complex.
b3d ist halt für 3d da. ich kenne kein programm dieser art was resourssen verschenken tut die durch waittimer hervorgerufen werden. das wäre perlen vor die säue schmeissen.

mdfg castle

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group