|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Feb 2006
Città: Torino
Messaggi: 1620
|
[C] Come fare un timer ad alta precisione?
Ciao a tutti, ho bisogno di un timer con risoluzione dell'ordine dei ms per un ambiente borland C++ v3.1, come lo posso ottenere?
grazie.
__________________
Il numero di respiri che fate nella vostra vita è irrilevante, quello che conta sono i momenti che il respiro ve lo tolgono... Nikon D750 - 24-120mm F4 - 70-300mm VR - Sigma 30mm f1.4 Art - Nikon 50mm f1.8 - Nikon 85mm f1.4 |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ovviamente dipende dal sistema operativo...quindi riferendosi alle PAI di Windows devi puoi usare timeGetTime
http://msdn.microsoft.com/library/de...imegettime.asp |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Feb 2006
Città: Torino
Messaggi: 1620
|
Quote:
__________________
Il numero di respiri che fate nella vostra vita è irrilevante, quello che conta sono i momenti che il respiro ve lo tolgono... Nikon D750 - 24-120mm F4 - 70-300mm VR - Sigma 30mm f1.4 Art - Nikon 50mm f1.8 - Nikon 85mm f1.4 |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jun 2004
Città: Monselice (PD)
Messaggi: 4641
|
mi inscrivo perche interessa anche a me
__________________
2500KCorsair H70Asrock EXTREME4 GEN38GB Corsair DDR3 1600MHz CL8Gainward GTX570 GLHSSD Samsung 830 64GBCorsair CX600Centaurion2G500206BW \_\_\_\_\_DrSpeed_/_/_/_/_/
|
|
|
|
|
|
#5 |
|
Bannato
Iscritto dal: Feb 2003
Messaggi: 947
|
Ho disponibile delle routine in assembly x86 spero ti siano utili ugualmente:
Uso delle routine: 1) Chiamare una sola volta la routine Init_Timer (calcolo overhead del timer). 2) Per misurare un tempo utilizzare Timer_On per marcare l'inizio della misurazione. 3) Utilizzare Timer_Off per marcare la fine della misurazione. 4) Il tempo trascorso si trovera' nella variabile 'elapsed_time'. 5) La precisione del timer e' di 1193046.47111 -> (2^32)/3600. Ossia se in 'elapsed_time' si trovera' il valore di 1193046 sara' passato circa 1 secondo. Codice:
BIOS_SEGMENT EQU 40h TIMER_OFFSET EQU 6Ch Init_Timer proc near pusha call Timer_On mov ds: dword ptr [overhead],0h mov cx,10h mov eax,ds: dword ptr [timer_start] loop_overhead: call Timer_On call Timer_Off loop loop_overhead mov ds: dword ptr [timer_start],eax call Timer_Off mov eax,ds: dword ptr [elapsed_time] shr eax,4h mov ds: dword ptr [overhead],eax popa ret Init_Timer endp Timer_On proc near push eax push es push BIOS_SEGMENT pop es pushf mov al,34h out 43h,al call Delay xor al,al out 40h,al call Delay out 40h,al pushf sti call Delay call Delay call Delay popf mov eax,es: dword ptr [TIMER_OFFSET] mov ds: dword ptr [timer_start],eax mov al,34h out 43h,al call Delay xor al,al out 40h,al call Delay out 40h,al popf pop es pop eax ret Timer_On endp Timer_Off proc near pushf push es push BIOS_SEGMENT pop es push eax sti call Delay call Delay call Delay mov al,34h out 43h,al call Delay xor al,al out 43h,al cli mov eax,es: dword ptr [TIMER_OFFSET] sub eax,ds: dword ptr [timer_start] shl eax,10h in al,40h call Delay mov ah,al in al,40h xchg al,ah neg ax sti sub eax,ds: dword ptr [overhead] mov ds: dword ptr [elapsed_time],eax mov al,36h out 43h,al call Delay xor al,al out 40h,al call Delay out 40h,al pop eax pop es popf ret Timer_Off endp Delay proc near jmp $+2h jmp $+2h jmp $+2h jmp $+2h jmp $+2h jmp $+2h jmp $+2h jmp $+2h ret Delay endp data segment byte 'DATA' overhead: DD ? timer_start: DD ? elapsed_time: DD ? data ends |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Feb 2006
Città: Torino
Messaggi: 1620
|
Quote:
__________________
Il numero di respiri che fate nella vostra vita è irrilevante, quello che conta sono i momenti che il respiro ve lo tolgono... Nikon D750 - 24-120mm F4 - 70-300mm VR - Sigma 30mm f1.4 Art - Nikon 50mm f1.8 - Nikon 85mm f1.4 |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:41.



















