Linux: Delay 100% CPU Last. Fehler beheben. BM < V1.12
Übersicht

![]() |
remaBetreff: Linux: Delay 100% CPU Last. Fehler beheben. BM < V1.12 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Irgendwie hat sich Mark wohl sich nicht mit Linux so beschäftigt. Den wen man folgenden Code probiert hat man immer 100% CPU Last.
Code: [AUSKLAPPEN] Graphics 800,600,0
While Not KeyHit(KEY_ESCAPE) DrawRect Rnd(0,800),Rnd(0,600),10,10 Flip Delay 1000 Wend Das liegt an der Datei: ../mod/brl.mod/system.mod/system.linux.c Dort ist Delay mit einer While-Schleife erstellt worden. Sehr unpofessionel. Code: [AUSKLAPPEN] void bbSystemDelay( int millis ){
int t; t=brl_system_MilliSecs(); while (brl_system_MilliSecs()-t<millis) {} // usleep( millis/1000 ); } Nun muss man folgendes tun um den Fehler zu beheben: 1. Man füge in dieser "system.linux.c" Datei oben im Header folgende Zeile hinzu: #include <unistd.h> 2. Man wandle die Funktion bbSystemDelay() so um: Code: [AUSKLAPPEN] void bbSystemDelay( unsigned long millis ) {
usleep( millis * 1000 ); } (Die Funktion usleep suspendiert den laufenden Prozess (in microsekunden), darum muss man das ganze mit 1000 multiplizieren um an Millisekunden zu kommen) 3. Nun der letzte Akt: im BlitzMax Editor wählt man program/build modules Und schon kommt man in dem Genuss vom echten Delay und auch Flip ohne 100%ige Prozessorlast, wie halt unter Windows und MacOS. Man kann gleich mal den obigen Programmcode testen. |
||
- Zuletzt bearbeitet von rema am Mo, Nov 21, 2005 23:29, insgesamt 2-mal bearbeitet
![]() |
TheShadowModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
sowas wie delay sollte man ehe nicht benutzen...
wenn man vollbild macht, dann läuft die CPU bei 100% (das ist auch OK so - für spiele braucht man volle leistung) wenn man debug-fenster macht, dann sollte es nicht 100% anzeigen... zumindest hab ich es so gelesen... |
||
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2 |
![]() |
rema |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schau mal in der Funktion nach, wo Flip gebildet wird nach! Da wird Delay für alle 3 Systeme verwendet!
Darum war es unter Linux auch komisch, da ein Programm das ab und zu was zeichnete oder 1000sende Sachen zeichnete immer auf 100% Systemleistung lief. Jetzt ist eben das Problem auch behoben. Code: [AUSKLAPPEN] Function Flip()
If Not displayGraphics Return If soft_sync Local t=MilliSecs()-sync_time sync_frame:+1000 Local n=sync_frame/graphics_hertz-t If n>0 And n<1000 Delay n '<------------------ hier Else sync_frame=t*graphics_hertz EndIf EndIf max2dGraphics._graphics.EndPaint max2dGraphics._graphics.BeginPaint End Function |
||
Nemesis |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
solltest du vielleicht im englischen forum ( bug oder modul tweaks ) posten. | ||
![]() |
rema |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schon gemacht. | ||
![]() |
rema |
![]() Antworten mit Zitat ![]() |
---|---|---|
Habe eine neue Version, da usleep anscheinend nicht sehr genau ist:
Habe Delay jetzt mit nanosleep realisiert, und jetzt ist Delay sehr genau! Editiere in: ../mod/brl.mod/system.mod/system.linux.c Code: [AUSKLAPPEN] void bbSystemDelay( long millis ){
struct timeval timeout; timeout.tv_sec = millis / 1000000L; timeout.tv_usec = millis % 1000000L; select(0, NULL, NULL, NULL, &timeout); } Und auch hier: ../mod/brl.mod/system.mod/system.linux.bmx Code: [AUSKLAPPEN] Type TLinuxSystemDriver Extends TSystemDriver
... Method Delay( millis ) bbSystemDelay( millis * 1000 ) End Method ... End Type Und nicht vergessen: im BlitzMax Editor wählt man program/build modules |
||
![]() |
SonGoku |
![]() Antworten mit Zitat ![]() |
---|---|---|
nice ^^ danke.
Aber es wäre super, wenn du deine änderung auch im englischen Forum reinschreiben würdest, damit der Support Team das sehen kann und den Mark bescheid sagen können ![]() MfG Goku |
||
Projekt "BlitzPong" --> 100%
BRL Account mit Blitz3D und BlitzMax für nur 67€!!! Das Buch "Spiele programmieren mit Blitz Basic" für nur 15€!!! |
![]() |
rema |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schon längstens erledigt, da ich mit User aus dem eng. Forum korespondiere. | ||
![]() |
rema |
![]() Antworten mit Zitat ![]() |
---|---|---|
Seit BlitzMax Version 1.12 ist dieser Fehler unter Linux behoben!!! | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group