Waittimer hängt [Gelöst]

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

Pummelie

Betreff: Waittimer hängt [Gelöst]

BeitragFr, Jul 31, 2009 15:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
Ich wollte Waittimer in einer Funktion einsetzen, also dort local erstellen und nutzen, doch das Programm bleibt an Waittimer stehen, da passiert bei mir nix mehr.

Hier mal code:
BlitzBasic: [AUSKLAPPEN]

Function GetLogginInf()
Local txte$
DrawAlphaImage2(CreateBox(200,100),300,250,20)
Flip
Local im=CreateImage(200,100)
GrabImage im,300,250
Viewport(300,250,200,100)
Local time2 = CreateTimer(25)
Repeat
Cls()
DrawImage(im,300,250)
Color 0,0,0
Text 400,255,"Adresse",1
txte$=Inpute$(400,305,txte$)
Flip 0
WaitTimer time2
Until INP_DONE = 1
INP_DONE=0
If txte$=0 Then Return(0)
Viewport(0,0,800,600)
Local loge=Loggin(txte$)
Return loge
End Function

Benutze Blitz Plus < neuste Version.
  • Zuletzt bearbeitet von Pummelie am So, Aug 02, 2009 13:48, insgesamt einmal bearbeitet

M0rgenstern

BeitragFr, Jul 31, 2009 15:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiß nicht, ob ich mich täusche, aber gehört waittimer nicht VOR flip 0?

Ansonsten wüsste ich nicht wo das Problem sein sollte... Ich persönlich stell waittimer immer an den Anfang der Schleife...


Lg, M0rgenstern

Nicdel

BeitragFr, Jul 31, 2009 15:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist eigentlich egal. Wen interessierts, wann in der Schleife gewartet wird. Ob er jetzt ganz oben oder ganz unten steht macht keinen Unterschied.
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

M0rgenstern

BeitragFr, Jul 31, 2009 15:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, mir ist bewusst das das egal ist. Ich dachte auch eher, dass waittimer vor flip 0 gehört...

Aber ich kanns mir nicht vorstellen...

Lg, M0rgenstern

Xeres

Moderator

BeitragFr, Jul 31, 2009 15:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Funktioniert es denn wie es soll wenn du Waittimer auskommentierst?
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

NightPhoenix

BeitragFr, Jul 31, 2009 17:15
Antworten mit Zitat
Benutzer-Profile anzeigen
bist du dir sicher, dass das irgendwann zutrifft?
Code: [AUSKLAPPEN]
Until INP_DONE = 1

M0rgenstern

BeitragFr, Jul 31, 2009 17:20
Antworten mit Zitat
Benutzer-Profile anzeigen
NightPhoenix, 'Tschuldigung, aber das hat ja nichts damit zu tun.

Wenn das niemals zutrifft wird die Schleife ja trotzdem weiterhin durchlaufen.

Wie ist das jetzt mit dem auskommentieren? Läufts dann?

Lg, m0rgenstern

Pummelie

BeitragFr, Jul 31, 2009 18:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ohne waittimer läuft alles wunderbar, doch braucht es bei mir 45% cpu Sad

Egal wo ich das waittimer hin mach, es läuft nicht.
Ebenfalls ist es egal wie groß der Timer ist, er hängt sich immer auf.
In der Hauptschleife des Programms läuft übrigens ein timer mit 25 wunderbar!

M0rgenstern

BeitragFr, Jul 31, 2009 18:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Kannst du die Funktion unabhängig von der Hauptschleife ausführen? Ansonsten liegt vllt dadran dass du zwei timer benutzt...

Lg, m0rgenstern

BtbN

BeitragFr, Jul 31, 2009 18:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie stellst du fest, dass der timer niemals tickt?
Wenn du einfach nur während der ausführung auf pause drückst, wirst du meistens immer bei WaitTimer landen.
Denn ich sehe nicht, wie die Abbruch-Bedingung für diese schleife eintreten soll, und somit wäre das programm für immer da drinne gefangen.

Pummelie

BeitragFr, Jul 31, 2009 19:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, ich sehe dara, das es am timer hängt, weil er jetzt (waittimer for flip) nicht auf flip kommt, und sich nichts mehr tut.

Xeres

Moderator

BeitragFr, Jul 31, 2009 19:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde ein stop vor die Schleife setzen, und Schritt für Schritt durchgehen was passiert.
Wurde der Timer erstellt (time2 <> 0)? Gibt BB keine Fehlermeldung aus?
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Pummelie

BeitragFr, Jul 31, 2009 19:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Der timer is richtig erstellt keine fehlermeldung, und mit stop hab ich nur rausbekommen, das es bei waittimer nicht mehr weitergeht.

Xaymar

ehemals "Cgamer"

BeitragSa, Aug 01, 2009 11:22
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn ich das jetzt richtig verstanden hab ist die funktion deine hauptschleife?
oder nur eine funktion die du zig mal aufrufst?

falls das 2. zutrifft:
bei jedem funktions aufruf kommt ein neuer timer. (FreeTimer)

vlt lieg ich auch total falsch.
Warbseite

hazumu-kun

BeitragSa, Aug 01, 2009 15:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich denke das dein Programm in der Repeat Schleife hängenbleibt weil die Abbruchbedingung NIE erfüllt wird.
Gib mal den Code zur Inpute Funktion. Vielleicht liegt der bug da.
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

Xeres

Moderator

BeitragSa, Aug 01, 2009 15:17
Antworten mit Zitat
Benutzer-Profile anzeigen
...dann würde es ja auch ohne waittimer nicht funktionieren...
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Pummelie

BeitragSo, Aug 02, 2009 6:58
Antworten mit Zitat
Benutzer-Profile anzeigen
die input Function, ist eine hier aus dem Forum, von D2006.
Die Function wird nicht von der Hauptschleife sondern von einer anderen Funktion aufgerufen (die keinen timer hat)

Andere Funktion:
BlitzBasic: [AUSKLAPPEN]

Function CheckKey()
Select KeyDown(29)
Case 1
Select KeyDown(38)
Case 1
GetLogginInf()
Return 1
End Select
Select KeyDown(1)
Case 1
Ende()
Return 1
End Select
Select KeyDown(25)
Case 1
Ping()
Return 1
End Select
End Select
Return 0
End Function

Nicdel

BeitragSo, Aug 02, 2009 10:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum so kompliziert?
Code: [AUSKLAPPEN]
Select KeyDown(29)
Case 1

Das geht doch auch mit
Code: [AUSKLAPPEN]
If KeyDown(29)
...
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

Pummelie

BeitragSo, Aug 02, 2009 10:34
Antworten mit Zitat
Benutzer-Profile anzeigen
diese function wird in der hauptschleife immer rangenommen, und soweit ich weiß
ist select doch schneller

Nicdel

BeitragSo, Aug 02, 2009 10:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, ist es nicht. Ich habs mit diesem Test ausprobiert:

Code: [AUSKLAPPEN]
time = MilliSecs()

For i = 0 To 1000000
Select KeyDown(29)
Case 1
a = 1
End Select
Next

Print MilliSecs()-time

time = MilliSecs()

For i = 0 To 1000000
If KeyDown(29)
a = 1
EndIf
Next

Print MilliSecs()-time

WaitKey

End


Edit:

Ergebnisse bei mir:

Select: 84 ms
If: 72 ms
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group