Pagina 1 di 1

[VB] Timer + preciso di 1ms

MessaggioInviato: gio lug 22, 2004 5:49 pm
da M@ttia
Avevo visto una volta in internet un modo x implementare, tramite le API mi sembra, un timer in VB 6 che fosse
+ preciso di 1ms come quello attuale di basic... qualcuno sa niente in proppsito??? Grazie! [^]

MessaggioInviato: gio lug 22, 2004 6:14 pm
da Xerex
Non cnosco niente in proposito, però, pensandoci un modo un po' complicato ci potrebbe essere...

Crei un'applicazione che cattura un particolare segnale, e un'altra che produce segnali a ripetizione...
in quel modo hai un timer, il modo in cui potresti sfruttarlo però non lo so![angel]

MessaggioInviato: gio lug 22, 2004 6:25 pm
da Ices_Eyes
Io so dirti che i timer di vb in realtà hanno una precisione di 55ms,e non di 1, c'è però un api che si chiama (non mi ricordo)
che invece lo da corretto in tempi di clock...Ora vedo se la ritrovo...

Ciao [^]

MessaggioInviato: gio lug 22, 2004 7:17 pm
da M@ttia
Ehm, credo opterò x la soluzione di Ices... [:-H]

MessaggioInviato: gio lug 22, 2004 7:39 pm
da Xerex
<blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">citazione:<hr height="1" noshade id="quote"><i>Messaggio inserito da M@ttia</i>
<br />Ehm, credo opterò x la soluzione di Ices... [:-H]
<hr height="1" noshade id="quote"></blockquote id="quote"></font id="quote">

Immaginavo[fischio]

MessaggioInviato: ven lug 23, 2004 9:23 am
da Zane
Ce l'ho io: ora devo fuggire, te lo posto entro il weekend!

MessaggioInviato: ven lug 23, 2004 11:02 am
da Zane
Codice: Seleziona tutto
Attribute VB_Name = "modTimer"
' Win32Api Dan Appleman

Public tempoinizio As Long 'Inizio del cronos
Public tempofine As Long    'Fine
Public risultatocronometro As Long  'SE
Public timePrecisioneMacchina As Long
Public timeResp As Long 'Tutto il resto che nn interessa

Public Type TIMECAPS
        wPeriodMin As Long
        wPeriodMax As Long
End Type

Public Type MMTIME
        wType As Long
        u As Long
End Type

Public Declare Function timeGetDevCaps Lib "winmm.dll" (lpTimeCaps As TIMECAPS, ByVal uSize As Long) As Long
'Interroga il sys e si fa dire qual è la precisione di gestione dei tempi
'Prende: un TIMECAPS (mette la rispsota), una dimensione del cestino di rispsota.



Public Declare Function timeBeginPeriod Lib "winmm.dll" (ByVal uPeriod As Long) As Long
Public Declare Function timeEndPeriod Lib "winmm.dll" (ByVal uPeriod As Long) As Long
Public Declare Function timeGetSystemTime Lib "winmm.dll" (lpTime As MMTIME, ByVal uSize As Long) As Long

Public Declare Function timeGetTime Lib "winmm.dll" () As Long
'Prende l'epoca in cui lo chiamo: facendo la differenza
'fra primo e seconda epoca ottengo quanto è passato
'Precisione di 5ms (difetto o eccesso, a seconda del più vicino)
'Miglioriamo (1ms) usando begin e end

Public Declare Function timeKillEvent Lib "winmm.dll" (ByVal uID As Long) As Long
Public Declare Function timeSetEvent Lib "winmm.dll" (ByVal uDelay As Long, ByVal uResolution As Long,
ByVal lpFunction As Long, ByVal dwUser As Long, ByVal uFlags As Long) As Long




Public Const TIME_SMPTE = &H8     '  ora SMPTE
Public Const TIME_SAMPLES = &H2     '  numero di campioni di onde
Public Const TIME_PERIODIC = 1  '  programma per evento periodico continuo
Public Const TIME_ONESHOT = 0  '  timer di programma per evento singolo
Public Const TIME_NOTIMEMARKER = &H4         '  non usa indicatore di ora
Public Const TIME_NOSECONDS = &H2         '  non usa secondi
Public Const TIME_NOMINUTESORSECONDS = &H1         '  non usa minuti o secondi
Public Const TIME_MS = &H1     '  tempo in millisecondi
Public Const TIME_MIDI = &H10    '  ora MIDI
Public Const TIME_FORCE24HOURFORMAT = &H8         '  usa sempre formato 24 ore
Public Const TIME_BYTES = &H4     '  offset byte corrente
Public Const TIMERR_BASE = 96 '  era 128, modificato in base a Win 31 Sonic
Public Const TIMERR_NOCANDO = (TIMERR_BASE + 1) '  richiesta non completata
Public Const TIMERR_NOERROR = (0)  '  nessun errore
Public Const TIMERR_STRUCT = (TIMERR_BASE + 33) '  dimensioni struttura ora




Public Sub timeInit()
    Dim cestinodirisposta As TIMECAPS
    Dim grandezzacestino As Long
    Dim risposta As Long
   
    grandezzacestino = Len(cestinodirisposta)
    syscaps = modTimer.timeGetDevCaps(cestinodirisposta, grandezzacestino)
   
    timePrecisioneMacchina = cestinodirisposta.wPeriodMax
    timePrecisioneMacchina = cestinodirisposta.wPeriodMin
   
End Sub
Più o meno: nn riesco a darti altri dettagli xchè al momento nn ho VB installato ([nomi]!) e ho dovuto guardare il codice in notepad..

MessaggioInviato: ven lug 23, 2004 2:29 pm
da M@ttia
Grazie ora faccio io [^] [brindisi]

MessaggioInviato: ven lug 23, 2004 2:41 pm
da Ices_Eyes
Ecco...Io avevo trovato quella che avevo usato, che era la timeGetTime, ma a questo punto non so che precisione avesse...[?]

Ciao [^]

PS le modifiche ai vari post le ho fatte cercando di far visualizzare la pagina senza la barra di scorimento orizontale che a volte appare (1024x768),un po' è servito, ma non del tutto...[:(!]

MessaggioInviato: ven lug 23, 2004 6:04 pm
da M@ttia
Ehm, sto provando ad usare questa funzione, ma non riesco ancora a capirla bene.. ho messo tutto in un modulo tranne il sub finale che lo metto come codice del form, e fin qui tutto ok, ma poi se chiamo la funzione timeInit() mi da errore... [?] (nel senso, non capisco come faccio ad integrarla con un timer...) [:-H]

MessaggioInviato: ven lug 23, 2004 6:19 pm
da Ices_Eyes
E'??? [?]

MessaggioInviato: ven lug 23, 2004 7:29 pm
da M@ttia
Niente tutto a posto, colpa mia che avevo cannato una cosetta... [:-H]