Torna indietro   Hardware Upgrade Forum > Software > Programmazione

WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
Un mondo affollato e vivo, personaggi destinati a sparire a fine test e nessuno a inseguire l'oggetto giusto. Beta e stress test di World of Warcraft: Forever hanno fatto emergere un roleplay spontaneo, tra danze a Goldshire e code ordinate ai PNG
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
In tre giorni a Las Vegas Oracle ha presentato agenti che eseguono il lavoro, l'alleanza con OpenAI e un cloud aperto agli acceleratori di tutti. Ma i clienti europei chiedono garanzie prima ancora delle funzionalità
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
Fino a 740 km WLTP con la batteria da 97,2 kWh, sospensioni che leggono la strada con una telecamera e un abitacolo da salotto parigino. La nuova DS N°7 raccoglie l'eredità della DS 7 e la porta, per la prima volta, nel mondo 100% elettrico. Ecco come è fatta, cosa offre e quanto costa.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 27-06-2004, 11:55   #1
kk3z
Senior Member
 
L'Avatar di kk3z
 
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;
    }
}
ora, il contatore funziona benissimo, il problema è dove metterlo nella funzione della dialogbox: infatti il ciclo mi ferma tutta la funzione stessa. Quindi mi chiedevo se c'è un modo di eseguire due funzioni contemporaneamente (può essere una soluzione) o qualsiasi altra cosa
grazie
kk3z è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2004, 12:35   #2
Luc@s
Senior Member
 
L'Avatar di Luc@s
 
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
a me sembra un ottima idea usare i thread
__________________
Gnu/Linux User
Luc@s è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2004, 12:48   #3
kk3z
Senior Member
 
L'Avatar di kk3z
 
Iscritto dal: Nov 2003
Messaggi: 980
Quote:
Originariamente inviato da Luc@s
a me sembra un ottima idea usare i thread
hum cioè?
kk3z è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2004, 12:52   #4
Luc@s
Senior Member
 
L'Avatar di Luc@s
 
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
Luc@s è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2004, 16:52   #5
ri
Senior Member
 
L'Avatar di ri
 
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
ri è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2004, 18:47   #6
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Sì
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2004, 10:45   #7
kk3z
Senior Member
 
L'Avatar di kk3z
 
Iscritto dal: Nov 2003
Messaggi: 980
cito quello che ho scritto
Quote:
dove ho un edittext dove devo inserire un contatore in tempo reale (del tipo 00:01, 00:02 ecc)
io devo visualizzare il timer il una edittext!
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 e siccome uso itoa per trasformare l'int in char per poi mandarlo alla edittext, non saprei proprio come fare

comunque, questo forse mi risolve un problema, ma ne volevo fare anche uno che va avanti
kk3z è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2004, 12:33   #8
cionci
Senior Member
 
L'Avatar di cionci
 
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...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2004, 13:00   #9
kk3z
Senior Member
 
L'Avatar di kk3z
 
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...
kk3z è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2004, 13:06   #10
kk3z
Senior Member
 
L'Avatar di kk3z
 
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.
kk3z è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2004, 15:01   #11
cionci
Senior Member
 
L'Avatar di cionci
 
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
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2004, 15:20   #12
kk3z
Senior Member
 
L'Avatar di kk3z
 
Iscritto dal: Nov 2003
Messaggi: 980
eccheglipasso?
potrei passagli un handle, se sapessi cos'è un LPVOID...
kk3z è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2004, 15:26   #13
cionci
Senior Member
 
L'Avatar di cionci
 
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.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2004, 15:33   #14
kk3z
Senior Member
 
L'Avatar di kk3z
 
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
kk3z è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2004, 16:08   #15
kk3z
Senior Member
 
L'Avatar di kk3z
 
Iscritto dal: Nov 2003
Messaggi: 980






























bastava che dichiaravo l'handle fuori dalla funzione
kk3z è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2004, 16:45   #16
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da kk3z
bastava che dichiaravo l'handle fuori dalla funzione
Non so se stai programmando ad oggetti o no... Nel caso che tu stia programmando ad oggetti è una pratica piuttosto brutta...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2004, 16:57   #17
ri
Senior Member
 
L'Avatar di ri
 
Iscritto dal: Feb 2003
Città: fra casa e lavoro
Messaggi: 1061
mi spieghi la difficoltà di sta roba?
Allegati
File Type: zip timer.zip (11.0 KB, 29 visite)
ri è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2004, 17:02   #18
cionci
Senior Member
 
L'Avatar di cionci
 
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.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2004, 17:44   #19
ri
Senior Member
 
L'Avatar di ri
 
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
ri è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2004, 20:10   #20
kk3z
Senior Member
 
L'Avatar di kk3z
 
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:
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...
ha bisogno di un loop, quindi nulla...

non vedo altri modi
kk3z è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà WoW Forever: la beta è stato uno dei mome...
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA Oracle AI World 2026: in Europa prima la sovrani...
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più Recensione Samsung Galaxy Tab S12 Ultra: non chi...
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura) Hyundai IONIQ 5 N, l'elettrica che finge di esse...
La Cina si prepara al primo lancio orbit...
Sale LAN, la Manovra 2027 introduce una ...
11 prezzi imperdibili in Amazon: non sol...
Giù i prezzi di Xiaomi 17T e Xiao...
Una tassa di 5,5 centesimi su ogni gigab...
Vuoi clonare un videogioco con l'IA? Cla...
Furto da 6,3 miliardi di dollari, Binanc...
Gli USA dipendono dai robot stranieri: T...
Volkswagen non ha più soldi per l...
Telescopio spaziale Hubble: la NASA cerc...
Più sottile e potente: le nuove i...
Il JPL estende la vita operativa della s...
DAZN Full è in offerta: tutta la ...
GTA 6 su PC potrebbe arrivare prima del ...
Da zero al tracciato in secondi: LibreCo...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 19:51.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v