ElapsedMilliseconds mit BlitzMax ?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

funkheld

Betreff: ElapsedMilliseconds mit BlitzMax ?

BeitragMo, Aug 28, 2017 8:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo, guten Tag.

Wie kann man bitte ElapsedMilliseconds mit Blitzmax benutzen?

Danke.
Gruss

Hubsi

BeitragMo, Aug 28, 2017 9:51
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzMax: [AUSKLAPPEN]
start=MilliSecs()

' Code

elapsed=MilliSecs()-start


Meinst Du sowas?
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

funkheld

BeitragMo, Aug 28, 2017 15:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke.
So ähnlich. Muss aber noch kleiner sein als Milli.

Gruss

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Aug 28, 2017 17:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Falls du es für eine Zeitrechnung, wie in beispielsweise in Rennspielen benötigst, dann musst du wohl den Bewegungsvektor der durch das Ziel geht mit in die Zeit einrechnen. Das wird benutzt, wenn zum Beispiel zwei Spieler im selben Frame durch das Ziel fahren, der eine aber eine halbe Wagenlänge vor dem anderem war (das kann vorkommen, wenn die Geschwindigkeit der Fahrzeuge sehr schnell ist). Dafür rechnet man den Bewegungsvektor als zusätzliche Einheit zur Zeitrechnung mit ein.

Edit Eine genauere Zeiteinteilung als Millisekunden ergeben daher auch keinen Sinn, da ein Programm ja dann mit mehr als 1000 FPS laufen müsste, was in jeglicher Hinsicht quatsch ist.
 

CO2

ehemals "SirMO"

BeitragMo, Aug 28, 2017 18:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, wenn es auf irgendeiner Art von Controller verwendet wird, kann ich mir schon vorstellen, dass Millisekunden zu grobkörnig sind.

Zum Thread: Ich kenne leider keine BlitzMax-Funktion, die soetwas kann. In C++ könnte es aber klappen. Ich versuche mal was zusammenzuschustern...

EDIT: Ich weiß nicht, wie akkurat diese Lösung ist.
C++ ("microsec.cpp") Code: [AUSKLAPPEN]
#include <sys/time.h>
#include <unistd.h>
#include <iostream>

timeval *pTV = NULL;

extern "C" void StartMicro()
{
   if (pTV != NULL)
      delete pTV;

   pTV = new timeval();
   gettimeofday(pTV, NULL);
}

extern "C" unsigned long long EndMicro()
{
   if (pTV)
   {
      timeval TV2;
      gettimeofday(&TV2, NULL);

      unsigned long long retval = TV2.tv_usec - pTV->tv_usec;
      delete pTV;
      pTV = NULL;
      
      return retval;
   }
   else
      return 0ll;
}


BlitzMax: [AUSKLAPPEN]
Import "microsec.cpp"

Extern
Function StartMicro()
Function EndMicro()
End Extern

StartMicro()

Sleep(205)

Print("Elapsed: " + EndMicro() + " us")
End
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti
 

funkheld

BeitragMo, Aug 28, 2017 20:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die Info.

Dein C++ funktioniert.

Gruss
 

sinjin

BeitragDo, Nov 02, 2017 3:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe es mal in Assembler gemacht, du benutzt/bzw du nimmst einfach den 1000 Millisekunden Timer...egal wann der aufgerufen wird...der wird einfach aufgerufen alle 1000 millisec, das hat sogar mit deiner Berechnung der Vektoren nichts mehr zu tun! Der wird vom Prozessor IMMER alle 1000 Millisekunden aufegrufen egal wo der CodePointer gerade ist, das kann auch inmitten deiner komischen Vectorberechnung passieren:
Code: [AUSKLAPPEN]

;in  fs:si - ttimer
;    bx:di - proc
;    pushw - freq >=18
;out es    - destroyed
proc ttimer_init
   xor ax,ax
   mov es,ax
   mov eax,[es:timerirq1 shl 2]
   mov [fs:si+ttimer.oldint],eax

   mov [fs:si+ttimer.start],round
   fldcw [fs:si+ttimer.start]
    pushd tickspersec
   mov bp,sp
   fild [word ptr ss:bp+8]
   fdiv [dword ptr ss:bp]
    pop eax
   fistp [fs:si+ttimer.start]
   mov ax,[fs:si+ttimer.start]
   mov [fs:si+ttimer.count],ax

   mov ax,timerfreq and 0FFFFh
   mov dx,timerfreq shr 16
   div [word ptr ss:bp+8]

    cli
   mov [es:timerirq1 shl 2],di
   mov [es:timerirq1 shl 2+2],bx

   mov bl,al
   mov al,36h ;b67=counter0 b45=0-7,8-15 b123=square b0=binary
   out porttimer+03h,al
   mov al,bl
   out porttimer,al
   mov al,ah
   out porttimer,al
    sti
retcode 2
endp
 

sinjin

BeitragDo, Nov 02, 2017 5:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Je länger und mehr du drüber nachdenkst, mein Code ist einfach schneller und wird auch correct aufgerufen, glaubst du Windows ist schneller? lol Windoof benutzt den selben "DOS"/Assembler code, Du schreibst dich einfach ein Very Happy Wie ich sagte...befor deine 3D-Berechnung fertig ist, mein Code ist schneller !!!!!!! Dein Gegner hat bereits gewonnen Very Happy Wenn du es WIRKLICH ECHT möchtest, mathematisch, dann spielt Zeit auch keine Rolle mehr! Jedes Spiel wird so lahm in Berechnungen...ich spiele nicht mehr Very Happy
 

sinjin

BeitragDo, Nov 02, 2017 5:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Du definierst einfach den Punkt der am nächsten der Motorhaube liegt, dann berechnest du halt nur den Punkt, anstatt alle durchzugehen welcher Punkt ist denn vorne Very Happy Tricks...do it. 2 Punkte ist auch ok, sortiere dein Modell halt wie du es als richtig empfindest, wie gesagt, bei Spieler...vergiss die Richtigte Mathematik, es soll ja so schnell und korrekt wie möglich sein....sei kreativ!
So korrekt wie möglich, und der Computer rechnet so lange....zu lange! Vergiss das einfach!!!!!!!!!
Für mich klappt, der Computer fährt, ok Mittelpunkt, Ziellinie, vorderster Punkt. vergiss die ganzen "korrekten" Berechnungen auch wenn ich gar keinen Mittelpunkt "in Wirklichkeit" habe, pfftt einen von den zwei Punkten, fertig! Als ob du das merkst!!!! Verstehste jetzt? Noch einmal, wenn es so korreckt wie möglich sein soll, das Spiel wäre mir zu lahm!!!! Wenn ich einfach über die Ziellinie fahre und der Computer auch....das will ich! Fertig! Auch die ganzen andere grossen Konzerne wie Sierra oder Lucas Games...Ziellinie...fertig!!!! Nich warten..oh, der einer Verktor war aber drüber nach den 1000 Berechnugen...wirklich? nee, der eine punkt IST einfach da!!!!! Fertig! Wenn dieses spezielle Ereignis stattfindet, dann kannste immernoch einfach nachprüfen, ok, der eine Punkt ist 0.1 grösser als der andere....FERTIG! DIE BERECHNING IST ERLEDIGT! du kannst dann ja immernoch hergehen...bla.....pffft wen interesiersts????? Du oder wir, werden es nicht checken!!!!!!!!! Ja genau: Rein mathematisch...warte mal....wie gesagt, ich will keine 5 Runden fahren um nachher zu hören: WARTE MAL hahaha Am Ende reichen mir die 1000 Millisekunden weil die einfach schneller als deine komischen 3D Berechnngen sind: fertig, der Computer hat nach 5 Runden gewonnen!!! Ende! 3 Millisekunden Unterschied.....Ende aus! Fertig!!!!
Wenn du es wirklich korrekt haben möchtest...dann vergiss alle anderen Runden, nur die Ziellinie zählt, ja dann musst du eventuell alle Punkte checken und auch die Zeit!!!!! und sogar auch interpolieren zwischen den Punkten und der Zeit die du hast....ganz ehrlich? pfft
Ist fast dasselbe, obwohl, da "merke" ich die Mathematik, ich habe ein Quadrat von 2x2 egal, aber ein Objekt kommt an mit einer Geschwindigkeit von 4x4, so gesehen hat mein Objekt mein Quadrat nicht mal gesehen....aber korrekterweise hat es geschnitten also doch berührt.....ganz erhrlich in Spielen? egal, dann ist es halt durch gegangen!
Hatte ich ich in mehr oder weniger modernen Spielen X2...da war ich so schnell, ich bin einfach "durch" das Poratal geflogen....habe also nicht geportet...egal!!!!!!!!!
Bei 2D Spielen finde ich es alldeing cool wenn die Spiele auch die Zeit betrachten, solche 2D- Berechningen sind nicht so Zeit intensiv wie bei 3D (Die 3D Berechnung dauert halt wesentlich länger als 2D, welch 3D Objekt kannst du dir vorstellen....welches 2D Object kannst du dir vorstellen?) 2D dauert nicht soo lange korrekt zu brechenen...omg ist bzw kann aber auch sehr schwer sein!

BladeRunner

Moderator

BeitragDo, Nov 02, 2017 20:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich möchte dich bitten von Postings im trunkenen / benebelten Zustand abzusehen.
Danke.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Thunder

BeitragFr, Nov 03, 2017 1:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Assemblercode ist sicher schnell... im Crashen
cli ist ein privilegierter Befehl, der im Userspace eine General Protection Exception auslöst.

Beim C++ Code finde ich schade, dass es eine globale Variable gibt und dass new/delete verwendet wird.
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Midimaster

BeitragFr, Nov 03, 2017 8:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Es gibt in Windows den QueryPerformance-Timer der genauer als Millionstel Sekunden ist. Man kann ihn gut dazu verwenden, die Zeit zwischen zwei Code-Zeilen zu messen.
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

Jolinah

BeitragFr, Nov 03, 2017 19:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Im Codearchiv hatte ich mal ein Beispiel dazu gepostet, könnte vielleicht hilfreich sein Wink
https://www.blitzforum.de/foru...hp?t=33180
 

sinjin

BeitragFr, Nov 03, 2017 20:00
Antworten mit Zitat
Benutzer-Profile anzeigen
So besser?
Code: [AUSKLAPPEN]

addhook emiteventhook,hookemit
function hookemit:object(id%,data:object,context:object)
  if (tevent(data).id=event_timertick) then
    print "ok"
  endif
  return data
endfunction

Midimaster

BeitragSa, Nov 04, 2017 11:55
Antworten mit Zitat
Benutzer-Profile anzeigen
genau Jolinah, so geht das. Tolles Code-Beispiel
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

BladeRunner

Moderator

BeitragSa, Nov 04, 2017 15:27
Antworten mit Zitat
Benutzer-Profile anzeigen
sinjin hat Folgendes geschrieben:
So besser?
Code: [AUSKLAPPEN]

addhook emiteventhook,hookemit
function hookemit:object(id%,data:object,context:object)
  if (tevent(data).id=event_timertick) then
    print "ok"
  endif
  return data
endfunction

Und was hat dein Code mit der Fragestellung im Thread zu tun?
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group