Problem bei Millisecs()
Übersicht

AliBetreff: Problem bei Millisecs() |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo.
Ich bin ein Perfektionist. Z.B. verwende ich nur dann Gosub, wenn auch der Spieler vom Untermenü auch nicht woanders hin verzweigen kann und die Schleife AUF JEDEN FALL abgeschlossen wird. Sonst zieht's n Rattenschwanz hinter sich her und es kann im Spiel abstürzen. Folgendes Beispiel: .a gosub b .b gosub a Dieses Programm läuft nicht mal ne 1/4 Sekunde. Es stürzt GLEICH ab. Bei .a goto b .b goto a wäre das nicht passiert. Das nur, um zu zeigen, daß ich Perfektionist bin. Genau aus dem gleichen Grund möchte ich nicht mit Millisecs() programmieren. Ganz einfach, weil die Zahl immer größer und größer wird und irgendwann in 20 Milliarden Jahren oder so die Zahl so groß ist, daß der Computer die einzelnen Ziffern sich nicht mehr merken kann... Das würde ja noch gehen, wer lebt schon so lang, aber ich hab irgendwo hier gelesen, daß BB sogar nach 49,7 Tagen abstürzt, da BB eine Zahlenbegrenzung bei ca. 2,1 Mrd. hat. Das heißt, Millisecs() überscheitet diese 2,1 Miliarden nach ca. 50 Tagen. Mein Problem: Ich programmier grad n Spiel, das aber "perfekt" zu sein hat, meinen Anforderungen wegen. Und es kann nicht sein, daß ich von jemandem verlange, daß er ... Sagen wir mal, er hat n Server, der schon seit 5 Jahren an ist, und er will mein Spiel zocken. Ich kann doch von ihm nicht verlangen, daß er extra wegen mir den Computer neu startet! Ich finde das blöd. Ich habe mir gedacht, daß man Millisecs() SOFORT in eine Zeichenkettenvariable speichert, dann abfragt, wieviele Zeichen in dieser Zeichenkettenvariable drin sind, und die letzten 7 meinetwegen nimmt und in eine Zahlenvariable umwandelt. Diese könnte man dann zum Zufallszahlgenerieren nutzen. Aber ich weiß nicht, ob das geht. Ich kann mir schwer vorstellen, daß BB Millisecs() AUSLIEST, NICHT abstürzt, diese in einer Zeichenkettenvariable speichert usw. Wenn er das machen würde, wäre das ja kein Problem. Was meint ihr? Wie kann man dieses Problem umgehen? Leides ist Millisecs() so weit ich weiß, die EINZIGE Möglichkeit, Zufallszahlen zu erzeugen... Deshalb kann man ohne Millisecs() GAR keine Zufallszahlen erzeugen und ist somit dem 49,7-Tage-Absturz hilflos ausgeliefert. ![]() Ali |
||
![]() |
bruZard |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du laberst einen geistigen Durchfall dass es mir fast nicht wert war zu antworten... | ||
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32
User posted image |
![]() |
Spikespine |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzBasic: [AUSKLAPPEN] MilliSecs() And $7fFFffFF |
||
Athlon 64 3700+ | 1024 MB RAM | GeForce 7900 GT | Blitz2D, Blitz3D, BlitzPlus, BlitzMax |
![]() |
ssj-goku |
![]() Antworten mit Zitat ![]() |
---|---|---|
Omg was will der Oo | ||
![]() |
Spikespine |
![]() Antworten mit Zitat ![]() |
---|---|---|
was willst du?
Les dir einfach mal diesen Thread durch, und nerv nicht: |
||
Athlon 64 3700+ | 1024 MB RAM | GeForce 7900 GT | Blitz2D, Blitz3D, BlitzPlus, BlitzMax |
- Zuletzt bearbeitet von Spikespine am Fr, Okt 14, 2005 13:58, insgesamt einmal bearbeitet
![]() |
XaronBetreff: Re: Problem bei Millisecs() |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ali hat Folgendes geschrieben: .a
gosub b .b gosub a Dieses Programm läuft nicht mal ne 1/4 Sekunde. Es stürzt GLEICH ab. Bei .a goto b .b goto a wäre das nicht passiert. Beides ist einfach nur böse... ![]() Wenn Du wirklich nach letzterem programmierst, bist Du von einem Perfektionisten meilenweit entfernt... Gruß - Xaron |
||
Cerberus X - Monkey X Reloaded! |
![]() |
bruZard |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Xaron: Nicht nur das macht ihn zum Idioten ... auch die Vermutung dass BB nach 49,7 Tagen einfach abstürzt ist heilloser Unsinn... | ||
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32
User posted image |
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du bist perfectionist, und ich bin perfect,
Wenn millisecs() 2 mrd überteigt, gehts bei -2mrd weiter also, if ms1 <ms then ... |
||
between angels and insects |
$tankY |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat aus der deutschen Onlinehilfe:
Bei Windows 95/98-Rechnern ohne Sicherheitsupdate kommt es nach 49,7 Tagen zu einem Timer-Überlauf und automatisch zu einem Absturz. Dies kommt daher, weil ein maximaler Wert von 2^32=4294967296 erreicht wird und der Windows-Timer nicht auf Null springt. Ein Windows-Update lässt das System nicht mehr abstürzen - es wird nur von Zeit zur Zeit neugestartet ![]() Aber ich glaub net, dass es noch Server gibt, welche Win 95/98 ohne Sicherheitsupdate haben, oder dass der server nicht zum update heruntergefahren wurde... |
||
Black |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Es gibt schon Probleme mit Timern wenn die Programme lange laufen:
Bei 32bit ints sind es die bekannten 49 tage. Bei floats geht die genauigkeit nach einiger Zeit flöten was auch ziemlich katastrophal ist. Gott sei dank ist mit 64bit alles besser (oder man benutzt doubles) ![]() Es macht aber nicht wirklich Sinn, sich wegen solcher Probleme den Kopf zu zerbrechen, wenn man goto und gosub so verwendet wie du es tust ![]() |
||
Ali |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo.
Ich habe mir dieses Minitut angeschaut. Es gibt ein kleines Zeitfenster von startzeit + DAUER < 0 und Millisecs() > 0 bis startzeit + DAUER < 0 und Millisecs() < 0 In diesem Zeitfenster wird "Blitz!!!!" nicht alle 150 Millisekunden, sondern bei JEDEM Repeat-Durchlauf auf den Monitor projeziert. Das Programm ist also nicht fehlerfrei. Abgesehen davon: Millisecs() springt von +2Mrd. auf -2Mrd. Danach wird auf -2Mrd. immer 1 hinzuaddiert, und obwohl die Zahl immer kleiner zu werden scheint, weil -1Mrd. sieht doch kleiner aus wie -2Mrd., ist doch -1Mrd. GRÖßER als -2Mrd. Eigentlich sollte der Timer im negativen Bereich GENAUSO funktionieren. OldMillisecs = MilliSecs() Repeat Cls SetBuffer BackBuffer() DAUER = 250 If (Oldmillisecs + Dauer) < Oldmillisecs Then ; haben wir das oben genannte Zeitfenster schon betreten? If (MilliSecs() + Dauer) > (MilliSecs()) Then ; wenn ja, hat Millisecs() das Vorzeichen gewechselt? ; Programm wird erst bei (Millisecs() + Dauer) ausgeführt. Diese liegen ja inzwischen im negativen Bereich. ; Da Millisecs() (Millisecs() + Dauer) erreichen muß, muß Millisecs() AUCH ein negatives Vorzeichen haben. If (MilliSecs()) >= (Oldmillisecs + DAUER) Then OldMillisecs = (MilliSecs()) Text Rand(200),Rand(200),"Blitz!!!!" End If End If End If If Oldmillisecs + DAUER > Oldmillisecs Then If (MilliSecs()) >= (Oldmillisecs + DAUER) Then OldMillisecs = (MilliSecs()) Text Rand(200),Rand(200),"Blitz!!!!" End If End If Flip Until KeyHit(1) End Was dieses Programm anbelangt, sie läßt beim Sprung von + nach - weder ein "BLITZ!!!!" aus, noch zeichnet es welche zuviel. Beim Sprung von +2Mrd.irgendwas zu -2Mrd.irgendwas wird der Zeitraum von 150 ms genau eingehalten! ![]() Im Minitutorial steht: Der Vorteil an dieser Methode liegt auch darin dass der erste Start automatisch erfolgt, auch wenn die Startzeitpunkt-Variable noch nicht belegt wurde, da sie dann ja mit einer "0" befüllt ist und somit auf jeden Fall kleiner ist als die Zeit in Millisecs(). Hier muß man wohl, so wie's aussieht, eine Startzeitpunkt-Variable belegen, da Millisecs() auch negativ sein kann. @ Xaron Wie würdst DU umgehen, daß .a Gosub b .b Gosub a abstürzt, OHNE Goto zu verwenden?? Der Grund, WARUM es abstürzt, ist doch der, weil Gosub sich MERKT, von wo das Unterprogramm gestartet wurde, bis irgendwann der Speicher voll ist und BB einfriert. Mit Goto wäre das NICHT passiert. @ bruZard Du bist unfreundlich. Das mit den 49,7 Tagen steht in der ONLINEHILFE! Wenn du sagst, daß das, was in der Onlinehilfe steht, falsch ist, macht das dich zum Idioten. |
||
Knartz |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
"ich bin perfektionist" - aha
"ich benutz goto" - uh oh wohl eher - "ich hab keine ahnung wie, aber ich bin gott" kann mal jemand diesen thread löschen ... |
||
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Programm wird NICHT nach 49,7 Tagen abstürzen. Sondern Windows. Allerdings Windows 98 in der ungepatchten Version. Das hat niemand mehr. Selbst die SE hatte den Fehler behoben.
Außerdem ist es oberpeinlich wie du dich Perfektionist schimpfst und dann Goto bzw. Gosub verwendet. In der Zeit von objektorientierter Programmierung bist du noch nicht mal bei Funktionen angekommen, willst aber ein Perfektionist sein. Desweiteren existiert BlitzBasic schon ein paar Jahre und mir ist noch nie aufgefallen, dass irgendjemand ein Problem damit hatte, dass Millisecs einen Überlauf bekommt. Wer spielt schon ein Spiel 49,7 Tage? Alles in allem sieht das ganze aus wie ein Knockout, wodurch Muhammed Ali besiegt worden ist. ![]() phpBB hat so schöne [ code ] Tags... MfG D2006 |
||
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2 |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ali hat Folgendes geschrieben: @ bruZard Du bist unfreundlich. Das mit den 49,7 Tagen steht in der ONLINEHILFE! Wenn du sagst, daß das, was in der Onlinehilfe steht, falsch ist, macht das dich zum Idioten.
Onlinehilfe: AddVertex hat Folgendes geschrieben: Die optionalen Koordinaten U und V sind für die Verschiebung der Textur gedacht. Dies funktioniert so: Die untere|linke Texturecke hat die Koordinate 0|0. Die obere|rechte Texturecke hat die Koordinate 1|1. Die Koordinate 0.5|0.5 ist dabei folgerichtig mittig auf der Textur.
Stimmt nicht, oben links is 0|0, und unten rechts 1|1 ^^ Da, bin ich ein Idiot? |
||
Black |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Kann sein, zumindest OGL benutzt ein Koordinatensystem wie es oben beschrieben wird. | ||
![]() |
BlitzChecker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jan_ hat Folgendes geschrieben: Du bist perfectionist, und ich bin perfect,
Wenn millisecs() 2 mrd überteigt, gehts bei -2mrd weiter also, if ms1 <ms then ... In der Rechtschreibung scheinst du aber nicht so perfekt zu sein, denn "perfekt" schreibt man mit "k" und nicht mit "c"! |
||
www.xairro.com |
![]() |
Triton |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jaja, ihr seid alle soo perfekt und die anderen natürlich nicht.
Dieser Thread hat sich bis hierhin jedenfalls in die absolutie Idiotie gesteigert und wird daher von mir geschlossen Die Frage, wozu du ein Programm fast 50 Tage lang laufen lassen willst wurde glaube ich noch nicht beantwortet. Ich kenne keine Anwendung, bei der das notwendig wäre. Und was deine sonstigen Probleme hinsichtlich perfektionismus angeht...ach, ich hol mirn Bier. |
||
Coding: silizium-net.de | Portfolio: Triton.ch.vu |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group