|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2003
Messaggi: 980
|
[c++ win32] contatore in tempo reale
ho un dialogbox che ha una sua specifica funzione (BOOL CALLBACK DlgProc ecc...) dove ho un edittext (un form) dove devo inserire un contatore in tempo reale (del tipo 00:01, 00:02 ecc)
il contatore è questo: Codice:
void wait ( int seconds )
{
clock_t endwait;
endwait = clock () + seconds * CLK_TCK ;
while (clock() < endwait) {}
}
char tempoz[10];
void contatore()
{
int tempo=0;
while(true)
{
wait(1); //aspetta un secondo
tempo=tempo++;
itoa(tempo, tempoz, 10); //trasformo l'int in array
SetDlgItemText(hwnd,IDC_TEMPO, tempoz); //inserisco il tempo nella edittext
break;
}
}
grazie |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
a me sembra un ottima idea usare i thread
__________________
Gnu/Linux User
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Nov 2003
Messaggi: 980
|
Quote:
|
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
dirami dal prog un thread a cui deleghi il compito di contare .........
Se su win32 giusto??? Allora have a look
__________________
Gnu/Linux User
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Feb 2003
Città: fra casa e lavoro
Messaggi: 1061
|
non è tutto _tremendamente_ più semplice usando un timer?
nell'InitIstance del dialogo lo fai partire con un SetTimer a 1000ms e poi gestisci l'evento OnTimer controllando l'ID che hai assegnato al tuo timer |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Sì
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Nov 2003
Messaggi: 980
|
cito quello che ho scritto
Quote:
la funzione SetTimer non ritorna i secondi a cui è arrivata in un dato istante, giusto? c'è la funzione QueryPerformanceCounter che però ha come argomento un LARGE_INTEGER comunque, questo forse mi risolve un problema, ma ne volevo fare anche uno che va avanti |
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Memorizza la data di sistema in secondi all'inzio del conteggio...
Usa SetTimer per settare un altro timer ogni decimo di secondo... Controlla la data di sistema attuale e fai la differenza da quella precedente... A questo punto metti il risultato nella editbox... |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Nov 2003
Messaggi: 980
|
ma in questo caso devo fare un loop, ogni volta mi deve controllare la data di sistema e fare la differenza...
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Nov 2003
Messaggi: 980
|
il fatto è che il problema pare essere risolto con il createthread, ma si crea un altro problema, cioè la funzione contatore non passa niente alla funzione della dialogbox, e quindi non posso inviare il numero all'editbox della dialogbox stessa
Ultima modifica di kk3z : 28-06-2004 alle 14:36. |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Che intendi per niente ? Al thread un parametro lo puoi passare
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Nov 2003
Messaggi: 980
|
eccheglipasso?
potrei passagli un handle, se sapessi cos'è un LPVOID... |
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
LPVOID è un void *...
LP nei tipi di Windows significa long pointer... Quando c'è una C significa contante... Quindi gli puoi passare qualsiasi puntatore... Ad esempio il puntatore alla editbox... L'importante è poi farci un cast al tipo originale per poter usare il puntatore per scrivere il valore nella editbox con SetWindowText... Ultima modifica di cionci : 28-06-2004 alle 15:28. |
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Nov 2003
Messaggi: 980
|
ecco stavo provando proprio questo, gli passo l'handle all'editbox (l'handle è un puntatore no?), che però mi trasforma in LPVOID a quanto pare, e quindi poi non posso fare SetWindowText(p, tempoz)
infatti mi dice invalid conversion spiegami meglio il cast al tipo originale |
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Nov 2003
Messaggi: 980
|
bastava che dichiaravo l'handle fuori dalla funzione |
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Feb 2003
Città: fra casa e lavoro
Messaggi: 1061
|
mi spieghi la difficoltà di sta roba?
|
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Mi sa che non usa MFC
Comunque anche io avrei fatto come te...anche se avrei messo il timer a 1/10 di secondo...per evitare errori... Non c'è garanzia che la procedura del timer venga eseguita entro un certo lasso di tempo...e ad un certo punto potrebbe capitare che il contatore salti di due secondi... Ultima modifica di cionci : 28-06-2004 alle 17:06. |
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Feb 2003
Città: fra casa e lavoro
Messaggi: 1061
|
si hai ragione, ma basta cambiare appunto i millisecondi di passaggio e il codice è già apposto
quello che non capisco invece è perchè si sta complicando la vita coi thread... o meglio, con i thread fatti a mano |
|
|
|
|
|
#20 | |
|
Senior Member
Iscritto dal: Nov 2003
Messaggi: 980
|
NON sto usando MFC e soprattutto NON ho visual c++
vedi un altro modo di farlo con le API? il loop nella funzione della dialogbox non posso farla... anche quello che mi aveva proposto cionci Quote:
non vedo altri modi |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:09.



















