Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Il primo headset open-back della linea INZONE arriva a 200 euro con driver derivati dalle cuffie da studio MDR-MV1 e un peso record di soli 199 grammi
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA
Al .NEXT 2026 di Chicago, Nutanix ha mostrato quanto sia cambiata: una piattaforma software che gestisce VM, container e carichi di lavoro IA ovunque, dall’on-premise al cloud pubblico. Con un’esecuzione rapidissima sulle partnership e sulla migrazione da VMware
Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta
Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta
Xiaomi Pad 8 Pro adotta il potente Snapdragon 8 Elite all'interno di un corpo con spessore di soli 5,75 mm e pannello LCD a 144Hz flicker-free, per un tablet che può essere utilizzato con accessori dedicati di altissima qualità. Fra le caratteristiche esclusive, soprattutto per chi intende usarlo con la tastiera ufficiale, c'è la modalità Workstation di HyperOS 3, che trasforma Android in un sistema operativo con interfaccia a finestre
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 17-02-2004, 09:19   #1
fabiot
Member
 
Iscritto dal: Apr 2003
Città: Roma
Messaggi: 204
[VC++] Mancato aggiornamento se metto in attesa il programma

Ho un problema, sto realizzando una applicazione in VC++ dialog based. Ho la necessità di eseguire un programma esterno (un programma che si esegue nel prompt dei comandi) mettendo in attesa il programma principale.

Il mio problema sta nel fatto che prima della partenza del programma si deve aggiornare la finestra di dialogo, ma questo non avviene.
Cioè se scrivo

m_messaggio="Questo messaggio deve essere visualizzato prima dell'esecuzione del programma");
UpdateData(FALSE);

SHELLEXECUTEINFO shExecInfo;
shExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
shExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
shExecInfo.hwnd = NULL;
shExecInfo.lpVerb = NULL;
shExecInfo.lpFile = "programma.exe";
shExecInfo.lpParameters = NULL;
shExecInfo.lpDirectory = NULL;
shExecInfo.nShow = SW_HIDE;
shExecInfo.hInstApp = NULL;
if(!ShellExecuteEx(&shExecInfo))
{
AfxMessageBox("Errore nell'esecuzione !!!");
return;
}
WaitForSingleObject(shExecInfo.hProcess, INFINITE);


La finestra di dialogo viene aggiornata solo dopo l'esecuzione del programma.
Come risolvo questo problema?
Grazie
fabiot è offline   Rispondi citando il messaggio o parte di esso
Old 17-02-2004, 12:01   #2
ri
Senior Member
 
L'Avatar di ri
 
Iscritto dal: Feb 2003
Città: fra casa e lavoro
Messaggi: 1061
quando è bloccato sul wait, il programma accoda tutti i messaggi inviati alla finestra nella coda, ma non vegono processati fino al ritorno della funzione
per fare quello che vuoi fare dovresti crearti un thread parallelo che esegua il programma e ne monitori lo stato, tenendo così libera la coda dei messaggi
ri è offline   Rispondi citando il messaggio o parte di esso
Old 17-02-2004, 17:35   #3
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
Prova a forzare il ridisegno della finestra... Usa RedrawWindow...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 17-02-2004, 19:58   #4
ri
Senior Member
 
L'Avatar di ri
 
Iscritto dal: Feb 2003
Città: fra casa e lavoro
Messaggi: 1061
se usa la WaitForSingleObject non può eseguire altre operazioni, è come se fosse bloccato in un getch
ri è offline   Rispondi citando il messaggio o parte di esso
Old 17-02-2004, 23:37   #5
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
Prima di WaitForSingleObject... Altrimenti può sempre usare un thread e fare la WaitForSingleObjcet da quel thread...con le ovvie precauzioni...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 18-02-2004, 07:56   #6
ri
Senior Member
 
L'Avatar di ri
 
Iscritto dal: Feb 2003
Città: fra casa e lavoro
Messaggi: 1061
e io che ho detto?

oppure...

Codice:
while(WaitForSingleObject(shExecInfo.hProcess, 1000) == WAIT_TIMEOUT)
{
    // rinfresco il dialogo
}

// se sei qui il processo ha terminato
ri è offline   Rispondi citando il messaggio o parte di esso
Old 18-02-2004, 11:10   #7
fabiot
Member
 
Iscritto dal: Apr 2003
Città: Roma
Messaggi: 204
l'ultima soluzione non funziona...

Scusate ma sono abbastanza ignorante in materia... se potete fornirmi degli esempi..

Rispiego il problema, probabilmente qualcuno può fornirmi una soluzione:

ho un programma dialog based che deve lanciare una applicazione dal prompt dei comandi. Questa applicazione al temine scrive un file di testo. Questo file di testo deve essere letto dal programma principale. Quindi il programma principale deve per forza aspettare che il programma figlio termina.
Quando però lancia il programma, deve aggiornare la finestra di dialogo con una scritta.
Il problema che se metto in attesa il programma principale con WaitForSingleObject la finestra non si aggiorna più.

qualcuno mi ha parlato di creare thread paralleli, ma come si fa??
vi prego, se potete fornitemi degli esempi.

...se non trovo la soluzione non mi laureo più....
fabiot è offline   Rispondi citando il messaggio o parte di esso
Old 18-02-2004, 11:17   #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
Quello che ti ha detto ri dovrebbe funzionare (l'attesa non è infinta, ma hai provato comunque con RedrawWindow prima di chiamare WaiForSingleObject ?
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 19-02-2004, 09:29   #9
fabiot
Member
 
Iscritto dal: Apr 2003
Città: Roma
Messaggi: 204
si ho provato RedrawWindow, ma che parametri devo passare?
Ho usato solo RedrawWindow();
fabiot è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2004, 09:00   #10
fabiot
Member
 
Iscritto dal: Apr 2003
Città: Roma
Messaggi: 204
please...
up!
fabiot è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2004, 09:26   #11
ri
Senior Member
 
L'Avatar di ri
 
Iscritto dal: Feb 2003
Città: fra casa e lavoro
Messaggi: 1061
il while va bene solo se lo incapsuli in un thread... questo perchè se lo fai all'interno della funzione ti tiene bloccata la coda dei messaggi... tutti i tuoi redraw vengono accodati ma mai eseguiti fino al termine della funzione che li ha richiamati
per non creare un thread puoi usare il TIMER del dialogo, e invece di fare un while usare un if, in quel modo non blocchi la coda dei messaggi e i redraw possono essere processati
ri è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2004, 09:38   #12
fabiot
Member
 
Iscritto dal: Apr 2003
Città: Roma
Messaggi: 204
grazie per la risposta, ma purtroppo non so come si usano i TIMER di cui mi parli.
Mi puoi fare un esempio,
grazie infinite
fabiot è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2004, 10:46   #13
ri
Senior Member
 
L'Avatar di ri
 
Iscritto dal: Feb 2003
Città: fra casa e lavoro
Messaggi: 1061
nell'InitDialog:
#define ID_EVENTO 1234
SetTimer(ID_EVENTO, 1000); // ogni 1s

nel class wizard intercetta il messaggio WM_TIMER
quindi nell'OnTimer:
if(WaitForSingleObject(shExecInfo.hProcess, 1000) == WAIT_TIMEOUT)
{
// rinfresco il dialogo
}
ri è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori Sony INZONE H6 Air: il primo headset open-back d...
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA Nutanix cambia pelle: dall’iperconvergenza alla ...
Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta Recensione Xiaomi Pad 8 Pro: potenza bruta e Hyp...
NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abb...
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz ASUS ROG Swift OLED PG34WCDN recensione: il prim...
Pirateria musicale: batosta record per A...
iRobot riparte: nuova era con Picea, Roo...
Bitcoin: Killing Satoshi, film sul miste...
Haier Mini LED 4K da 65 pollici a soli 5...
Windows, come nascondere tutte le finest...
Meta 'svuota' la startup di Mira Murati:...
Nuvacore: gli ex Nuvia e Qualcomm rilanc...
Verifica dell'età online, Ursula ...
Snap licenzia il 16% dei dipendenti: sar...
Motorola Edge 70 Pro, ecco le specifiche...
Quattro accessori auto su Amazon che cam...
TV OLED LG ai minimi storici su Amazon: ...
Apple prepara un nuovo aggiornamento per...
JBL Flip 7 a 94€ su Amazon: ecco perché ...
ECOVACS DEEBOT X12 OmniCyclone arriva in...
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: 09:48.


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