Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

DO LOOP

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
progga



Anmeldungsdatum: 26.11.2006
Beiträge: 26

BeitragVerfasst am: 28.11.2006, 20:24    Titel: DO LOOP Antworten mit Zitat

Hallo,

ich nutze gerne die do loop schleife um mir z.b live die koordinaten der Maus anzeigenzulassen oder immer live auf was reagieren will wie z.b eine eingabe etc.
doch es viel mir auf das mein prozessor 2,4Ghz dann auch zu 100% ausgelastet ist.
Das passt mir irgenwie nicht denn nichtmal Unreal 2004 nimmt soviel leistung in anspruch......
Wie kann ich auch ohne einer schleife in basic auf was reagieren? Sprich das ein bestimmer Code immer und immer wieder ausgeführt wird aber nicht gleich den Prozessor voll auslastet... ich hoffe Ihr versteht was ich meine.

Danke im vorraus.!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 28.11.2006, 20:40    Titel: Antworten mit Zitat

Hi. lächeln
Das kommt daher, dass der Code halt dauerhaft ausgeführt wird, was die anderen Prozesse abbremst. Heißt, für den Prozessor/das Betriebssystem sieht es so aus, als würdest du dauernd irgendwelche Rechenoperationen ausführen. zwinkern
Mach einfach ein
Code:

Sleep 1

Vor der Zeile mit dem LOOP, dann geht's. Denn dann kann die Kontrolle kurz an andere Prozesse abgegeben werden.
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 28.11.2006, 20:41    Titel: Antworten mit Zitat

Das Problem ist, das du dem Prozessor keine "Verschnaufspause" gibts.
Wenn du irgendwo in der Schleife "Sleep 10" oder "Sleep 1" schreibst, dann sollte die Prozessorlast auf höchstens 1% sinken.

Edit: Verdammt... Schon wieder zu langsam. Kannst du nich vorher mal sagen, dass du auch postest? durchgeknallt
_________________
Code:
#include "signatur.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
progga



Anmeldungsdatum: 26.11.2006
Beiträge: 26

BeitragVerfasst am: 28.11.2006, 21:15    Titel: Antworten mit Zitat

Hallo!

Ok, ich knall dann einfach ein sleep rein!
Ich dachte vieleicht gibt es ein "Timer" so ähnlich wie in JavaScript.
Noch eine andere frage ohne noch ein Thread aufzumachen:

Gibt es sowas wie "mousemove" ? Also das nur dann was passiert wenn die Maus bewegt wird?
Ich könnte natürlich in einer schleife eine if abfrage machen:
z.b:
Code:

do
getmouse x,y,,taste
if x > 0 or y >0 then TU WAS
loop

Aber vieleicht gibt es ja einer bessere Methode?

Danke[/code]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 28.11.2006, 21:23    Titel: Antworten mit Zitat

@programmierer:
Okay, schreib dir demnächst immer 'ne pm. grinsen

@progga:
Das mit dem Timer wäre auch nicht gegangen, da FB ja nicht ereignisgesteuert arbeitet. Heißt, du hättest wieder 'ne Do..Loop-Schleife gebraucht. zwinkern

Zu dem mit dem "MouseMove"...
as say, FB arbeitet nicht ereignisgesteuert. neutral

Oh, sry...so wie ich das jetzt sehe, was du gemeint hast... verlegen
Du müsstest dann halt die ursprünglichen Koordinaten speichern, ungefähr so:
Code:

Do
  GetMouse X, Y, Rad, Taste
  If X<>OldX or Y<>OldY Then
    ' Irgendwas machen
    OldX=X
    OldY=Y
  End If
  Sleep 1
Loop

Das müsste gehen. Allerdings nicht vergessen: die Zuweisungen von OldX und OldY müssen bleiben!
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
progga



Anmeldungsdatum: 26.11.2006
Beiträge: 26

BeitragVerfasst am: 28.11.2006, 21:46    Titel: Antworten mit Zitat

Ok danke!

So wie in deinem Beispiel habe ich es auch schon gemacht, nur wie gesagt man weiss ja nicht was so alles in FB steckt zwinkern
Ist ziemlich ungewohnt alles ohne Ereignisse zu machen... aber das wird schon!

Danke nochmal!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 28.11.2006, 23:48    Titel: Antworten mit Zitat

Es gibt schon etwas, womit man ohne getmouse feststellen kann, ob die Maus bewegt wurde.

Screenevent ist in der CVS Version verfügbar, und macht so etwas möglich:

Code:
'' include fbgfx.bi for some useful definitions
#include "fbgfx.bi"

Dim e As EVENT

screenres 640, 480
Do
    If (screenevent(@e)) Then
        Select Case e.type
        Case EVENT_KEY_PRESS
            If (e.scancode = SC_ESCAPE) Then
                End
            End If
            If (e.ascii > 0) Then
                Print "'" & e.ascii & "'";
            Else
                Print "unknown key";
            End If
            Print " was pressed (scancode " & e.scancode & ")"
        Case EVENT_KEY_RELEASE
            If (e.ascii > 0) Then
                Print "'" & e.ascii & "'";
            Else
                Print "unknown key";
            End If
            Print " was released (scancode " & e.scancode & ")"
        Case EVENT_KEY_REPEAT
            If (e.ascii > 0) Then
                Print "'" & e.ascii & "'";
            Else
                Print "unknown key";
            End If
            Print " is being repeated (scancode " & e.scancode & ")"
        Case EVENT_MOUSE_MOVE            ''                                  <---- Maus wurde bewegt
            Print "mouse moved to " & e.x & "," & e.y & " (delta " & e.dx & "," & e.dy & ")"
        Case EVENT_MOUSE_BUTTON_PRESS
            If (e.button = BUTTON_LEFT) Then
                Print "left";
            Elseif (e.button = BUTTON_RIGHT) Then
                Print "right";
            Else
                Print "middle";
            End If
            Print " button pressed"
        Case EVENT_MOUSE_BUTTON_RELEASE
            If (e.button = BUTTON_LEFT) Then
                Print "left";
            Elseif (e.button = BUTTON_RIGHT) Then
                Print "right";
            Else
                Print "middle";
            End If
            Print " button released"
        Case EVENT_MOUSE_DOUBLE_CLICK
            If (e.button = BUTTON_LEFT) Then
                Print "left";
            Elseif (e.button = BUTTON_RIGHT) Then
                Print "right";
            Else
                Print "middle";
            End If
            Print " button double clicked"
        Case EVENT_MOUSE_WHEEL
            Print "mouse wheel moved to position " & e.z
        Case EVENT_MOUSE_ENTER
            Print "mouse moved into program window"
        Case EVENT_MOUSE_EXIT
            Print "mouse moved out of program window"
        Case EVENT_WINDOW_GOT_FOCUS
            Print "program window got focus"
        Case EVENT_WINDOW_LOST_FOCUS
            Print "program window lost focus"
        Case EVENT_WINDOW_CLOSE
            End
        End Select
    End If
Loop


Der Code ist auf der Seite zu finden, die ich oben verlinkt habe.
_________________
Code:
#include "signatur.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz