|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#21 | |
|
Moderatore
Iscritto dal: Nov 2006
Messaggi: 21919
|
Quote:
__________________
"WS" (p280,cx750m,4790k+212evo,z97pro,4x8GB ddr3 1600c11,GTX760-DC2OC,MZ-7TE500, WD20EFRX) Desktop (three hundred,650gq,3800x+nh-u14s ,x570 arous elite,2x16GB ddr4 3200c16, rx5600xt pulse P5 1TB)+NB: Lenovo p53 i7-9750H,64GB DDR4,2x1TB SSD, T1000 |
|
|
|
|
|
|
#22 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
|
Quote:
purtoppo non ho esperienza in programmazione di questo tipo Ma come faccio a questo punto a capire se il tempo che leggo è quello di variazione del bit oppure dei vari sleep? |
|
|
|
|
|
|
#23 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
|
grossolanamente il codice è questo
Codice:
byte buf[1024];
//TH1
while(1)
{
WaitForSingleObject(hMutex,INFINITE);
RiempiArray(buf);
ReleaseMutex(hMutex);
Sleep(250);
}
Codice:
//TH2
while(1)
{
WaitForSingleObject(hMutex,INFINITE);
for(int i=0; i<1024; i++)
{
if(bit cambia stato)
calcola_tempo();
SetEvent ( hEvent2 );
}
ReleaseMutex(hMutex);
Sleep(50);
}
Codice:
//TH3
while(1)
{
WaitForSingleObject(hEvent2 ,INFINITE);
Salva_Tempo();
ResetEvent( hEvent2 );
}
|
|
|
|
|
|
#24 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
|
|
|
|
|
|
|
#25 |
|
Senior Member
Iscritto dal: Jul 2011
Messaggi: 381
|
Mi spiace ma non conosco il funzionamento di quelle funzioni quindi non ti saprei dire cose corrette; come mai hai scelto di utilizzare le MSDN Library?
Non puoi quantificare i ritardi per una valanga di motivi tra cui: non conosci il numero di processi, non conosci i tempi dei singoli processi, non conosci le deadline dei processi, non conosci lo scheduler, non conosci la priorità dei processi... etc. etc.
__________________
Concluso positivamente con: Kamzata, Ducati82, Arus, TheLastRemnant, ghost driver, alexbull1, DanieleRC5, XatiX Ultima modifica di starfred : 01-08-2011 alle 14:38. Motivo: quantificare ritardi |
|
|
|
|
|
#26 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
|
Quote:
Sto facendo alcune prove e noto ritardi di al massimo 15 millisecondi tra una lettura l'altra. I dati reali mi sono stati forniti dal costruttore del dispositivo e dove viene dichiarato 1 secondo io leggo a volte 1,015 = 1015 ms |
|
|
|
|
|
|
#27 |
|
Moderatore
Iscritto dal: Nov 2006
Messaggi: 21919
|
spannometricamente oltre 1s di tempo ciclo l'influenza del sistema operativo diventa trascurabile
__________________
"WS" (p280,cx750m,4790k+212evo,z97pro,4x8GB ddr3 1600c11,GTX760-DC2OC,MZ-7TE500, WD20EFRX) Desktop (three hundred,650gq,3800x+nh-u14s ,x570 arous elite,2x16GB ddr4 3200c16, rx5600xt pulse P5 1TB)+NB: Lenovo p53 i7-9750H,64GB DDR4,2x1TB SSD, T1000 |
|
|
|
|
|
#28 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
|
Quote:
Ho notato una certa ripetibilità dopo centinaia di migliaia di misurazioni vie ethernet dove il massimo ritardo che ho registrato sono 15 ms che guarda caso sembrano proprio quelli che inserisco io come pausa tra i thread. |
|
|
|
|
|
|
#29 |
|
Senior Member
Iscritto dal: Jul 2011
Messaggi: 381
|
Prova a stressare di tanto la macchina e poi effettua il test. Che tempi ci sono?
__________________
Concluso positivamente con: Kamzata, Ducati82, Arus, TheLastRemnant, ghost driver, alexbull1, DanieleRC5, XatiX |
|
|
|
|
|
#30 | ||
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
Quote:
Tieni inoltre presente che se tu fai una sleep di 500 ms, l'esecuzione non avviene ogni mezzo secondo, perche' ci devi aggiungere anche il tempo di esecuzione tra una sleep e l'altra. Dovresti schedulare una sleep di (500 - tempo appena consumato) (oppure una schedulazione ricorrente, se il sistema operativo lo supporta).
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
||
|
|
|
|
|
#31 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
|
|
|
|
|
|
|
#32 | ||
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
Quote:
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
||
|
|
|
|
|
#33 |
|
Senior Member
Iscritto dal: Jul 2011
Messaggi: 381
|
Io intendo una situazione di sovraccarico; hai presente quando il mouse si muove a scatti?
Prova a fare il test mentre usi un programma di stress pesante della cpu e I/O
__________________
Concluso positivamente con: Kamzata, Ducati82, Arus, TheLastRemnant, ghost driver, alexbull1, DanieleRC5, XatiX |
|
|
|
|
|
#34 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
|
una volta che si è assestato il programma in quanto allo start i tempi sono randomici, il ritardo che leggo è +/- 16 millisecondi
|
|
|
|
|
|
#35 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
|
Quote:
sono io che impongo il tempo di lettura per non sovraccaricare la CPU. Ho provato anche ad implementare due CreateEvent() in modo che il TH1 risvegliasse TH2 quando questo ha finito di leggere da ethernet ma nulla vieta poi a TH1 se non metto un semaforo, di fare una nuova lettura da ethernet rendendo i dati nel buffer analizzato in quel momento da TH2 inconsistenti. |
|
|
|
|
|
|
#36 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
|
|
|
|
|
|
|
#37 | |
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
a questo punto il secondo thread viene eseguito solo quando serve.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
|
|
|
|
|
#38 | |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Quote:
Tieni una coda di serie di letture. Il thread che legge accoda una serie nuova e un riferimento utile per capire quando la lettura e' avvenuta, un semplice sequenziale. Quando e' 42, singifichera' che la serie si riferisce al 42*512ms = 21 secondi dalla partenza, (fatti salve le inaccuratezze di schedulazione fin qui esposte) Il thread che processa i dati scoda e analizza, con molta calma, quando piu' gli fa comodo. In questo modo non hai neppure bisogno di mutex se non per accodare-scodare, cosa comunque molto light e gia' anche implementata gratis se usi una System.Collections.Concurrent.ConcorrentQueue<T>
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. Ultima modifica di gugoXX : 01-08-2011 alle 16:10. |
|
|
|
|
|
|
#39 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
|
Quote:
Tra primo e secondo cè un semaforo per evitare inconsistenza di dati nel buffer e tra il secondo ed il terzo un evento che sempre il terzo, una volta sodisfatto resetta. Ultima modifica di misterx : 01-08-2011 alle 16:13. |
|
|
|
|
|
|
#40 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
|
Quote:
Non mi viene in mente come accodare ho allegato il simulatore che si basa sul medesimo principio: è per Borland Builder C++ ma facilemnet adattabile Ultima modifica di misterx : 01-08-2011 alle 16:20. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:37.




















