PDA

Visualizza la versione completa : c++ builder ciclo while background


luigi.ghi67
10-02-2013, 19:54
Buongiorno.
Volevo chiedere un informazione.
Ho scritto un programma in c++ builder che elabera continuamente dei dati da un ciclo while quasi infinito e visualizza delle immagine tramite lo strumento image su una form.
Ho scritto tutto questo lavoro nel form create.
Ora quando mando in esecuzione, Non posso accedere a altre opzioni nel menu della form in quanto è bloccata del ciclo while e non posso cliccare...
Domanda; è possibile mandare il processo in background, visualizzare le immagini (quando vengono ricevute) sulla form e intanto poter accedere a altre funzioni del programma nel menu?
Grazie!

oregon
10-02-2013, 20:26
Devi utilizzare un altro thread ... ovviamente avrai difficoltà di sincronizzazione, da risolvere a seconda del caso specifico.

luigi.ghi67
10-02-2013, 20:35
come faccio a usare un altro thread.
Mi puoi fare un esempio...
non li ho mai usati
grazie

oregon
10-02-2013, 20:47
Se non hai mai usato i thread, non ti basterà certamente un esempio (a parte che ne trovi ovunque su internet). Ti consiglio di studiare l'argomento da un buon libro e con tanti esercizi per un tempo appropriato.

luigi.ghi67
11-02-2013, 17:42
non c'è un metodo "semplice" per capire come devo operare?

oregon
11-02-2013, 18:44
La gestione dei thread non è semplice ma puoi inserire una

Application->ProcessMessages();

all'interno del ciclo per cercare di garantire la gestione dei messaggi e quindi la gestione della GUI.

ESSE-EFFE
11-02-2013, 20:52
Originariamente inviato da luigi.ghi67
Ho scritto tutto questo lavoro nel form create.

E' meglio non usare OnCreate in C++. Utilizza il costruttore del form.


Originariamente inviato da luigi.ghi67
Ora quando mando in esecuzione, Non posso accedere a altre opzioni nel menu della form in quanto è bloccata del ciclo while e non posso cliccare...

Come ti hanno già suggerito, una ProcessMessages può fare da pezza, ma la soluzione migliore è di spostare il ciclo in un thread. La VCL ha una classe pronta e relativamente semplice per questo: TThread. Comincia a guardare l'help in linea per quello.


Originariamente inviato da luigi.ghi67
Domanda; è possibile mandare il processo in background, visualizzare le immagini (quando vengono ricevute) sulla form e intanto poter accedere a altre funzioni del programma nel menu?

Ovviamente sì, l'unico accorgimento è che non puoi accedere agli elementi del form direttamente dal thread secondario. Anche per questo aspetto la classe TThread ha un metodo apposito (Synchronize), comunque ci sono anche altre modalità.

Loading