Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 05.01.2009, 15:03 Titel: Mit Screenlock/unlock funktioniert das Programm nicht mehr. |
|
|
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 |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4700 Wohnort: ~/
|
Verfasst am: 05.01.2009, 15:51 Titel: |
|
|
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 |
|
 |
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 05.01.2009, 15:59 Titel: |
|
|
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 |
|
 |
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 05.01.2009, 16:52 Titel: |
|
|
Wenn ich screenlock und screenunlock weglasse dann klappt alles aber es flackert ja leider, woran kann das liegen? |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 05.01.2009, 17:40 Titel: |
|
|
muss vor
Code: | if inkey = CHR(255) + "k" then end |
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 05.01.2009, 18:14 Titel: |
|
|
ThePuppetMaster hat Folgendes geschrieben: |
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 |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4700 Wohnort: ~/
|
Verfasst am: 05.01.2009, 18:38 Titel: |
|
|
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 ). 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 |
|
 |
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 05.01.2009, 18:46 Titel: |
|
|
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 |
|
 |
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 05.01.2009, 23:18 Titel: |
|
|
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 |
|
 |
|