| |
|
|
Ulrich Milde | Es ist nicht ganz einfach sich die Infos stückweise zusammenzusuchen, speziell wenn die Anfängerscheuklappen sich fast automatisch vor die Augen klappen sowie Assembler, DLL und ähnliches auftaucht. XPSE gesucht, gefunden, gesaugt und dann? Exakt das wars, nämlich ein grosses Fragezeichen. XPIA schwirrte in den Ergebnissen der XPSE Forensuche auch dauernd durch die Gegend. Klasse, da gabs Infos die mir weitergeholfen haben! XPSE tut jetzt vermutlich das, was es soll, aber nun hänge ich wieder fest und weiss nicht weiter.
Was will ich überhaupt und warum? Weil Zeitgeber jeglicher Art in Profan Mangelware sind und der einzige Timer mit dem regelmässigen pollen der seriellen Schnittstelle schon gut beschäftigt ist war ich auf der Suche nach Alternativen. Time$ kam wegen des ungünstigen Formats nur sehr ungern und zähneknirschend in Frage. Die Lösung wäre Unixtime, das ich in der Codebibliothek gefunden hatte. Deswegen auch XPSE,und XPIA. Dummerweise scheint erstens Unixtime eher ein Testprogramm zu sein und zweitens bin ich noch dümmer wenn es um das Einbinden von dem geht, was Unixtime macht. (DLL - Scheuklappe klapp...) Die Anzahl der Sekunden, die seit einem Tag irgendwann in den 70ern vergangen sind wäre genau passend für einen Timer. Gut, geht nicht kleiner als eine Sekunde und ist nicht rücksetztbar, aber damit kann ich gut auskommen.
IWie gehe ich mit dem um was XPSE ausgibt? Das einzig brauchbare scheint mir die erstellte DLL zu sein, wenn ich denn wüsste wie ich mit der umzugehen habe. Dazu kommt noch dass möglicherweise der Profancode zum Ausprobieren auch noch mit in der DLL steckt . CLS, Waitkey und Co. kann ich ganz bestimmt nicht gebrauchen...
Es wäre sehr nett wenn sich jemand erbarmen würde und mir sagt was ich wie zu tun habe damit Unixtime das tut, was es soll.
Vielen Dank, Grüsse und Tschüss!
PS. Schade dass so etwas gut brauchbares halbvollendet in der Codebibliothek vor sich hinschlummert! Unixtime wäre genau richtig,- denn einen Holzhammer der alles mögliche in allen Zeitsystemen umrechnen kann, den brauch ich eigentlich nicht.. |
|
|
| |
|
|
|
Michael Wodrich | Die Prozedur UnixTime ist ein Sekundenzähler, der am 1.1.1970 gestartet ist. Die seitdem verstrichene Zeit in Sekunden wird zurückgegeben. Unix bezieht aus diesem Zähler seine Zeitberechnung.
An dem Testcode unter der Funktion kann man den Aufruf ablesen. Hier noch ein Beispiel: KompilierenMarkierenSeparieren {$Cleq}
$H C:ProfanIncludeWindows.ph
Proc Unixtime
Declare Buffer#, Bufferptr&, Zeit&
ist Struct TimeBuffer = FTimeLo&, FTimeHi&, DivLo&, DivHi&, BiasLo&, BiasHi&, ErgebnisLo&, ErgebnisHi&
Dim Buffer#,32
Bufferptr& = Addr(Buffer#)
~Getsystemtimeasfiletime( Buffer# )
Long Buffer#,8 = $00989680, 0, $D53e8000, $019Db1de
Asmstart _tounix(Bufferptr&)
mov esi,para1
mov eax,[esi]
mov edx,[esi+4]
sub eax,[esi+16]
sbb edx,[esi+20]
mov [esi],eax
mov [esi+4],edx
xor edi,edi
or edx,edx
jns @tu1
inc edi
neg eax
adc edx,0
neg edx
mov [esi],eax
mov [esi+4],edx
@tu1:
mov ebx,[esi+8]
mov esi,[esi+12]
or esi,esi
jns @tu2
inc edi
neg ebx
adc esi,0
neg esi
@tu2:
jnz @tu3
or ebx,ebx
jz @tu8
mov ecx,eax
mov eax,edx
xor edx,edx
div ebx
xchg eax,ecx
div ebx
jmp @tu6
@tu3:
bsr ecx,esi
inc cl
push ebx
shrd ebx,esi,cl
shrd eax,edx,cl
shr edx,cl
div ebx
mov ebx,eax
mul esi
mov ecx,eax
pop eax
push esi
mov esi,para1
mul ebx
add edx,ecx
jc @tu4
cmp edx,[esi+4]
ja @tu4
jb @tu5
cmp eax,[esi]
jbe @tu5
@tu4:
dec ebx
@tu5:
pop esi
xor ecx,ecx
mov eax,ebx
@tu6:
dec edi
jnz @tu7
neg eax
adc ecx,0
neg ecx
@tu7:
mov esi,para1
mov [esi+24],eax
mov [esi+28],ecx
jmp @exit
@tu8:
xor eax,eax
dec eax
mov ecx,7fffffffh
jmp @tu6
@exit:
Asmend (Zeit&)
Dispose Buffer#
Return Zeit&
Endproc
Declare Sek1&, Sek2&
Sek1& = UnixTime()
sleep 4000 schlafe 4 Sekunden (4000 Millisekunden)
Sek2& = UnixTime()
cls
print Startzeit:, Sek1&
print Endezeit:, Sek2&
print vergangen in Sekunden:, Sek2& - Sek1&
waitkey
end
Ich habe eine DLL (MwDate) in Arbeit mit etlichen Datum- und Zeitroutinen. Da werde ich auch die UnixTime mit aufnehmen. Das dauert aber noch ein Weilchen.
DLL deshalb, weil sich die Assemblerteile damit leichter handhaben lassen.
Schöne Grüße Michael Wodrich |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 03.03.2007 ▲ |
|
|
|
|
Michael Wodrich | Hattest Du eigentlich schon dies gefunden?
Millisekunden-genaue Zeitmessung [...] |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 03.03.2007 ▲ |
|
|
|
|
Ulrich Milde | Keine DLL, nur ein bischen Profan, was das abfragt was bei Windows tickt. Das sieht ja gut aus, sehr gut sogar! Das ist der zweite Timer den ich vermisst hatte. Damit kann ich einen unabhängigen Timeout messen während sich %wmtimer weiter das pollen der RS232 kümmert. Timer$ kommt auch noch an die Reihe, wenn ich zum protokollieren der Messwerte komme.
Michael, vielen Dank für den Tipp und Grüsse vom Ulrich! |
|
|
| |
|
|
|
GDL | Falls dir die Timer noch ausgehen sollten, ich lese mit der Thread.pcu meine Schnittstellen ein.
Servus Georg |
|
|
| |
|
|