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:

Mit Screenlock/unlock funktioniert das Programm nicht mehr.

 
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
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 05.01.2009, 15:03    Titel: Mit Screenlock/unlock funktioniert das Programm nicht mehr. Antworten mit Zitat

Ich hab mal etwas mit den Subs rum gespielt, das Programm hat keinen Sinn ich wollte eigentlich nur was ausprobieren aber es klappt nicht richtig. Sobald die Sub (als Thread) gestartet wird reagiert das Programm nicht mehr. Ich könnte zwar die Sub auch weglassen und alles viel einfacher lösen aber es geht mir nicht um den Sinn des Programms, ich möchte nur meine n Fehler wissen.
Code:
'#include "fbgfx.bi"
screen 20',,,&H08 or &H04
IF SCREENPTR = 0 THEN
   PRINT "Bildschirmmodus nicht initialisiert!"
   sleep
   END
END IF
windowtitle "test""
declare sub maus()
dim shared as integer testa, testb
dim shared as integer mausx, mausy,maustaste
dim shared as byte maustl,maustr,maustm,ende
dim as single fpss,fpse,fpsc,fps
print FRE/(1024*1024);" MB RAM frei"
sleep 500
threadcreate (cast(any ptr,@maus))
fpss=timer
do
    fpsc=fpsc+1
    if fpse-fpss>= 1 then
        fps=fpsc
        fpsc=0
        fpss=timer
    end if
   
    screenlock
    cls
    if maustl=1 then print "linke Maustaste"
    if maustr=1 then print "rechte Maustaste"
    if maustm=1 then print "mittlere Maustaste"
    print fps & " fps"
    print timer
    print mausx,mausy
   
   
   
   
    testa = testa + 1
    print testa
   
   
   
    screenunlock
    if multikey(&h01) or inkey = CHR(255) + "k" then
        ende=1
        threadwait(threadcreate (cast(any ptr,@maus)))
        end
    end if
   
    sleep 1,1
    fpse=timer
loop


sub maus
    do
        getmouse (mausx, mausy,,maustaste)
       
        if maustaste > -1 then
            if bit(maustaste,0)then
            maustl=1
            else
            maustl=0
            end if
           
            if bit(maustaste,1)then
            maustr=1
            else
            maustr=0
            end if
           
            if bit(maustaste,2)then
            maustm=1
            else
            maustm=0
            end if
       
        endif
        sleep 1,1
       
        if ende=1 then exit do
    loop
end sub

end

Wenn ich Screenlock und Screenunlock wegkommentiere dann klappt der Rest.


Zuletzt bearbeitet von frebas am 05.01.2009, 18:06, insgesamt 2-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4701
Wohnort: ~/

BeitragVerfasst am: 05.01.2009, 15:51    Titel: Antworten mit Zitat

Ich habe noch nicht mit THREADCREATE gearbeitet, aber mal soviel: Bevor das Programm beendet werden kann, muss der Thread beendet werden. Der befindet sich aber in einer Endlosschleife ohne Abbruchbedingung. Ich würde erst einmal bei CHR(255) & "k" eine global definierte Abbruchvariable setzen, die sowohl im Thread als auch im Hauptprogramm für ein Beenden der Schleife sorgt, und dann im Hauptprogramm vor Programmende noch ein THREADWAIT setzen.

Warum hast du in der SUB überhaupt zwei Endlosschleifen ineinander geschachtelt? Die äußere macht doch gar nichts, weil die innere nie verlassen wird. Und ein GETMOUSE pro Schleifendurchlauf würde reichen.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 05.01.2009, 15:59    Titel: Antworten mit Zitat

Also erstmal danke für die Antwort.
Die äußere do...loop Schleife stammt noch von einem anderen Versuch das Problem zu beheben. Und ohne den Thread zu stoppen klappt es auch das Programm zu beenden, aber das muss ich noch reinmachen.

Dass da GETMOUSE öfters verwendet wird liegt daran dass ich irgendwas falsch kopiert hab^^
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 05.01.2009, 16:52    Titel: Antworten mit Zitat

Wenn ich screenlock und screenunlock weglasse dann klappt alles aber es flackert ja leider, woran kann das liegen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 05.01.2009, 17:40    Titel: Antworten mit Zitat

Code:
SCREENUNLOCK

muss vor
Code:
if inkey = CHR(255) + "k" then end



MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 05.01.2009, 18:14    Titel: Antworten mit Zitat

ThePuppetMaster hat Folgendes geschrieben:
Code:
SCREENUNLOCK

muss vor
Code:
if inkey = CHR(255) + "k" then end



MfG
TPM

Ich hab jetzt mal ein paar Änderungen vorgenommen, denoch bricht das Programm immer nach ein paar Sekunden ab aber ein paar durchläufe schaft es.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4701
Wohnort: ~/

BeitragVerfasst am: 05.01.2009, 18:38    Titel: Antworten mit Zitat

Vielleicht kommt GETMOUSE nicht mit einem gelocktem (was für ein Wort) Screen zurecht? Wenn ich GETMOUSE auskommentiere, klappt es (bis auf die Tatsache, dass das Programm dann nicht mehr viel Sinn ergibt happy). Ich teste allerdings unter Linux.

NB: In Zeile 8 ist ein schließendes Anführungszeichen zu viel.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 05.01.2009, 18:46    Titel: Antworten mit Zitat

Mir ist auch schon aufgefallen dass es ohne getmouse oder ohne screenlock klappt, aber ich bin nicht drauf gekommen dass es dazwischen einen zusammen geben könnte. Ich glaub was du sagst ist richtig.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 05.01.2009, 23:18    Titel: Antworten mit Zitat

Ihr könnt ja in die Befehlsreferenz schreiben, dass Getmouse einen Fehler im Programm verursacht wenn gerade der Screen mit screenlock "gelockt" ist.
Nach oben
Benutzer-Profile anzeigen Private Nachricht 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