Newsgroup: it.comp.programmare.win32
Titolo: SetTimer e tempi corti.

Salve a tutti.
Su questo NG ho letto che la SetTimer() diventa imprecisa con tempi sotto i
100 mS e che comunque il tutto dipende sempre da cosa sta facendo l'SO: come
faccio quando ho bisono di tempi più corti e soprattutto indipendenti (o
quasi) dal SO ?
Esiste qualche altra funzione o metodo ?
Normalmente uso MSC Visual C++  6.0 con le MFC e come SO Win98/NT.
Grazie a tutti.
Drugo

 ha scritto nel messaggio
news:8vbnuo$480$1...@serv1.iunet.it...


creare un thread parallelo e usare Sleep(...)
non so come si fa (anzi, sarei felice se qualcuno ci illustrasse come...),
ma Sleep è più precisa di SetTimer()
--
ciao
..::[xaero]::..


Potresti farti una classe
class MyTimer{
    public:
        DWORD dwTempo;
        ...
    protected:
        DWORD dwNowT;
        ...
    private:
        ...
};
E qui fai delle belle funzioni con ad esempio dei do..while oppure for.
Non invento nulla di nuovo, se vuoi ti mando un timer ultra sensibile
provato e riprovato anche su OS quali Solaris...
Beh se lo vuoi manda un email a 
tal...@virgilio.it
CIAO

 non so come si fa (anzi, sarei felice se qualcuno ci illustrasse come...),
Non vedo la difficoltà...
1) Crei un thread un ciclo infinito che ad ogni iterazione chiama Sleep(0)
oppure Sleep(1)
     Tramite il Performance Counter verifica il tempo passato dall'ultima
sleep.
2) Il thread segnala (magari con un SetEvent) il thread che deve eseguire
qualcosa ad intervalli prestabiliti.
Io uso un sistema simile per accedere al mio DirectSound Streamer con
precisione audio di 3ms.
Cmq. questo sistema si mangia la CPU!
spero di esserti stato utile.
cya ;)

 quasi) dal SO ?
Per le CPU Pentium (e superiori) il modo per avere la massima
risoluzione e` usare RDTSC, un'istruzione assembly che legge un
contatore interno a 64 bit della CPU che viene incrementato a ogni colpo
di clock. Quindi ti basta fare una "calibrazione" all'inizio del
programma, poi usando RDTSC puoi produrre (in teoria) ritardi di poche
decine di nanosecondi. Dico "in teoria" perche` comunque il tuo thread
continua ad essere schedulato dal sistema operativo; quindi ti puoi
trovare delle pause extra di dieci o piu` millisecondi (la durata di uno
slice) messe a tradimento all'interno di una qualsiasi temporizzazione.
E se sono temporizzazioni critiche cio` non e` bello. :)
Con tutto cio` voglio dire questo: se ti interessa produrre dei ritardi
*minimi* (senza limiti verso l'alto), tutto OK; se ti interessa produrre
dei ritardi *massimi* o comunque molto precisi, devi per forza scrivere
un driver o usare un sistema operativo realtime. :)
---
Bye! Lorenzo Lutti
http://antani.virtualave.net/


Sapete mica dirmi se esiste un driver già fatto pronto per l'uso per un
timer preciso e dove posso trovarlo ?
Grazie a tutti
Drugo

ho letto qualcosa a proposito di timer multimediali (timeSetEvent)
documentato sotto graphics/multimedia-input
si puo' gestire anche lo scarto massimo, e credo faccia qualcosa come creare
un thread ed impostare la priorita', visto che nella documentazione dicono
che tempi di scarto troppo bassi possono compromettere la funzionalita' del
sistema...
prova a dare un'occhiata, ciao