| 
 | |||||||
| 
 | 
|  | 
|  | 
|  | Strumenti | 
|  20-01-2006, 11:38 | #1 | 
| Senior Member Iscritto dal: Jan 2003 Città: Castellammare di Stabia (NA) 
					Messaggi: 2031
				 | 
				
				"Rallentare" un ciclo for
			 
		Salve a tutti mi trovo a dover escogitare un modo per rallentare l'esecuzione di un ciclo for, la cui velocità dipende (credo) dalla velocità della macchina. Sto programmando un'applicazione in Visual C++,che deve disegnare "real time" un grafico di una forma d'onda (in pratica tipo strip chart) NN sto a spiegarvi xchè (sono niubbo  ), devo disegnare un pixel alla volta di sta forma d'onda, e devo correlare la forma d'onda a un asse dei tempi.... Pensavo a installare un timer, e rendere indipendente dalla macchina la velocità di esecuzione del for..... Esiste qualche metodo + sicuro? Idee? Aiutatemi.... 
				__________________ ho fatto affari con: na decina di anime   | 
|   |   | 
|  20-01-2006, 11:45 | #2 | |
| Senior Member Iscritto dal: Nov 2005 Città: TO 
					Messaggi: 5206
				 | Quote: 
 
				__________________ Andrea, SCJP 5 (91%) - SCWCD 5 (94%) | |
|   |   | 
|  20-01-2006, 12:38 | #3 | |
| Senior Member Iscritto dal: Jan 2003 Città: Castellammare di Stabia (NA) 
					Messaggi: 2031
				 | Quote: 
   ho creato un'applicazione "MFC Application wizard", dialog based... cmq per ora sto lavorando cn le MFC, credo di nn aver avuto molto a che fare sinora cn le API....   
				__________________ ho fatto affari con: na decina di anime   | |
|   |   | 
|  20-01-2006, 13:24 | #4 | 
| Senior Member Iscritto dal: Nov 2003 
					Messaggi: 980
				 | 
		Beh, in realtà tutte le funzioni che chiami sono funzioni membro delle MFC che a loro volta chiamano le api, quindi le stai usando indirettamente     Si, il timer è la soluzione giusta (perchè non dovrebbe essere sicura?), anche perchè non vedo come eseguire un loop e aggiornare il grafico contemporaneamente se non mettendo il loop in un thread. Guarda SetTimer e WM_TIMER | 
|   |   | 
|  20-01-2006, 14:05 | #5 | 
| Senior Member Iscritto dal: Jan 2003 Città: Castellammare di Stabia (NA) 
					Messaggi: 2031
				 | 
		in pratica, riflettendoci un pò, installando un timer ed eseguendo un loop tramite il suddetto, nn dovrei + aver bisogno del for..... o sbaglio? potrei creare un ciclo veloce quanto voglio tramite un timer.... è fattibile secondo te (voi)? 
				__________________ ho fatto affari con: na decina di anime   | 
|   |   | 
|  20-01-2006, 14:39 | #6 | 
| Senior Member Iscritto dal: Jun 2002 Città: 
Provincia De VaRéSe   ~ § ~ Lat.: 45° 51' 7" N  Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~  Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~  ~ § ~ You Must Go Out ~ § ~ 
					Messaggi: 8895
				 | 
		sleep (time) ~§~ Sempre E Solo Lei ~§~ 
				__________________  Meglio essere protagonisti della propria tragedia che spettatori della propria vita  Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso | 
|   |   | 
|  20-01-2006, 14:45 | #7 | |
| Senior Member Iscritto dal: Nov 2003 
					Messaggi: 980
				 | Quote: 
 Esempio, questo ciclo... Codice: for (int i = 0; i<qualcosa; i++)
{
   doSomething(array[i]);
}Codice: void OnTimer(..)
{
   doSomething(array[i]);
   i++;
}Chiaramente sia "array" che "i" devono essere o globali o membri della tua classe Ultima modifica di kk3z : 20-01-2006 alle 14:47. | |
|   |   | 
|  20-01-2006, 15:02 | #8 | 
| Senior Member Iscritto dal: Jan 2003 Città: Castellammare di Stabia (NA) 
					Messaggi: 2031
				 | 
		grazie del consiglio.... nn potrei dichiarare la variabile i come static, e quindi locale? @fenomeno in pratica la funzione sleep provoca un ritardo..... il problema è che io vorrei che la macchina dove lavoro fosse "+ lenta", o almeno veloce quanto voglio io.... in pratica devo rendermi indipendente dalla velocità della macchina, che poi è la causa che mi ha portato a valutare questa cosa.... 
				__________________ ho fatto affari con: na decina di anime   | 
|   |   | 
|  20-01-2006, 15:21 | #9 | 
| Senior Member Iscritto dal: Jun 2002 Città: 
Provincia De VaRéSe   ~ § ~ Lat.: 45° 51' 7" N  Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~  Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~  ~ § ~ You Must Go Out ~ § ~ 
					Messaggi: 8895
				 | 
		ah ho capito ... scusa ma per quale problema hai dovuto fare questo? ~§~ Sempre E Solo Lei ~§~ 
				__________________  Meglio essere protagonisti della propria tragedia che spettatori della propria vita  Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso | 
|   |   | 
|  20-01-2006, 16:04 | #10 | |
| Senior Member Iscritto dal: Jan 2003 Città: Castellammare di Stabia (NA) 
					Messaggi: 2031
				 | Quote: 
 Nella prima schermata veniva costruito l'asse dei tempi in base al clock della macchina, e cioè in base a quanto veloce si disegnava il grafico. Cn macchine lente funzionava:ora invece, andando troppo veloce, si finisce la prima shermata in un tempo inferiore al secondo...... te l'ho fatta molto breve, ma + o - la cosa sta in qsti termini 
				__________________ ho fatto affari con: na decina di anime   | |
|   |   | 
|  24-01-2006, 10:07 | #11 | 
| Senior Member Iscritto dal: Jan 2003 Città: Castellammare di Stabia (NA) 
					Messaggi: 2031
				 | 
		raga, ritorno sulla questione perchè ho fatto alcune prove e altre considerazioni. Se provo ad eseguire il ciclo for, durante quest'ultimo (e soprattutto se ripeto il ciclo for indefinitamente) nn posso + accedere ai comandi della finsestra (ovvio direte voi) Stavo pensando di programmare in modo multithread, cioè fare un thread che si occupa del plot dei dati (ad alta priorità) e l'applicazione principale gestisce i comandi tipo: FREEZE, STOP, +/- AMPL, +/- LINEA DI ZERO ecc.... fattibile? 
				__________________ ho fatto affari con: na decina di anime   | 
|   |   | 
|  24-01-2006, 11:24 | #12 | 
| Senior Member Iscritto dal: Nov 2003 
					Messaggi: 980
				 | 
		Ma come, non eri passato ai timer? Con il timer questo problema non c'è, dato che non blocca la gestione dei messaggi     | 
|   |   | 
|  24-01-2006, 13:11 | #13 | |
| Senior Member Iscritto dal: Jan 2003 Città: Castellammare di Stabia (NA) 
					Messaggi: 2031
				 | Quote: 
 se uso un ciclo fatto con timer, anche se è molto veloce (ma nn so con sicurezza QUANTO veloce), posso perdere molti campioni del segnale, visto che io nn uso un buffer per plottare (lo so,nn ditemi nulla, è barbaro come modo....) una cosa importante ho da chiederti: ma creare/gestire pià thread nella stessa apllicazione in visual c++, è possibile con le applicazioni dialog based? Ti prego, dimmi di si.....   
				__________________ ho fatto affari con: na decina di anime   | |
|   |   | 
|  24-01-2006, 13:29 | #14 | |
| Senior Member Iscritto dal: Nov 2005 Città: TO 
					Messaggi: 5206
				 | Quote: 
   
				__________________ Andrea, SCJP 5 (91%) - SCWCD 5 (94%) | |
|   |   | 
|  24-01-2006, 13:39 | #15 | |
| Senior Member Iscritto dal: Jan 2003 Città: Castellammare di Stabia (NA) 
					Messaggi: 2031
				 | Quote: 
   riguardo la questione dei timer, credo che cmq per me nn sia possibile usarli, perchè ho provato che, se per esempio ritardo ogni iterazione for di 1msec(il minimo, credo)m, è troppo lento!   
				__________________ ho fatto affari con: na decina di anime   | |
|   |   | 
|  24-01-2006, 14:05 | #16 | |
| Senior Member Iscritto dal: Nov 2005 Città: TO 
					Messaggi: 5206
				 | Quote: 
 - WM_TIMER viene dispacciato come messaggio, ed è oltretutto un messaggio a bassa priorità (cioè viene inviato solo quando non ci sono messaggi a priorità più elevata nella coda dei messaggi). - Sebbene alla funzione SetTimer si possa passare un valore in millisecondi, non è detto che la risoluzione sia proprio del millisecondo. La documentazione dice ad esempio: "Windows 2000/XP: If uElapse is less than 10, the timeout is set to 10". Quindi WM_TIMER è inaffidabile se devi gestire temporizzazione molto precise e dell'ordine del millisecondo. Puoi provare eventualmente a vedere se ti possono essere utili i <Multimedia Timers>. 
				__________________ Andrea, SCJP 5 (91%) - SCWCD 5 (94%) | |
|   |   | 
|  24-01-2006, 16:03 | #17 | 
| Senior Member Iscritto dal: Jan 2003 Città: Castellammare di Stabia (NA) 
					Messaggi: 2031
				 | 
		allora.....    penso di aver risolto il problema abbassando la frequenza di campionamento della scheda DSP che mi fornisce il segnale, visto che prima avevo sovracampionato un pò troppo (10khz contro un segnale che varia con frequenza di2-3hz al max....). Ora ho scelto come frequenze possibili 800-400-200-100Hz Ora sto studiando la questione del multithread.... in pratica, in una finestra di dialogo, voglio creare un thread che si occupa del plottaggio del segnale (ciclo for) e il thread principale si occupa dei comandi utente. Sarà difficile secondo voi? Sarà problematico passare dal thread principale al thread "di lavoro" i valori aggiornati delle variabili? 
				__________________ ho fatto affari con: na decina di anime   | 
|   |   | 
|  24-01-2006, 17:59 | #18 | 
| Senior Member Iscritto dal: Jun 2002 Città: 
Provincia De VaRéSe   ~ § ~ Lat.: 45° 51' 7" N  Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~  Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~  ~ § ~ You Must Go Out ~ § ~ 
					Messaggi: 8895
				 | 
		cioè te hai un segnale che va a f0= 2hz e mi campioni a 800hz? fai un sacco di campionamente inutile. ~§~ Sempre E Solo Lei ~§~ 
				__________________  Meglio essere protagonisti della propria tragedia che spettatori della propria vita  Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso | 
|   |   | 
|  24-01-2006, 21:31 | #19 | 
| Senior Member Iscritto dal: Jun 2002 Città: 
Provincia De VaRéSe   ~ § ~ Lat.: 45° 51' 7" N  Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~  Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~  ~ § ~ You Must Go Out ~ § ~ 
					Messaggi: 8895
				 | 
		ah comunque se non ricordo male anche sotto vc++ ci dovrebbe essere il corrispondente timer del vb che è molto semplice. ~§~ Sempre E Solo Lei ~§~ 
				__________________  Meglio essere protagonisti della propria tragedia che spettatori della propria vita  Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso | 
|   |   | 
|  25-01-2006, 09:29 | #20 | |
| Senior Member Iscritto dal: Jan 2003 Città: Castellammare di Stabia (NA) 
					Messaggi: 2031
				 | Quote: 
 ora sto studiando come creare un nuovo thread nell'applicazione, che si deve occupare di plottare il grafico. Hai suggerimenti/guide da darmi? GRAZIE A TUTTI!!!! 
				__________________ ho fatto affari con: na decina di anime   | |
|   |   | 
|   | 
| Strumenti | |
| 
 | 
 | 
Tutti gli orari sono GMT +1. Ora sono le: 01:44.









 
		 
		 
		 
		









 
  
 



 
                        
                        










