Newsgroup: it.comp.programmare.win32
Titolo: [BCB] rilascio del controllo (?)

Ciao,
 ho un form che contiene una TImage che prelevo dalla rete mediante un 
TNMHTTP. 
Il probelma è che mentre 'scarico' questa immagine il form è praticamente 
'congelato' ovvero non riesco a spostarlo, ridimensionarlo ed il menù 
praticamente si ammutina.
Esiste una soluzione pratica?
Grazie
Mieru

Esiste una soluzione pratica?
Pratica non molto, ma esiste una soluzione.
Puoi creare un thread parallelo e lascargli scaricare
l'immagine.
-- 
The Follet

 l'immagine.
puoi molto piu semplicemente chiamare Application->ProcessMessages() nel
tuo loop
[dissertazione]
molti ritengono che usare un thread sia la soluzione piu elegante, ma
sinceramente scandire la coda dei messaggi e forzarli mi sembra piu
efficace.
Usare un thread ha senso, a mio parere, quando l'operazione da compiere e'
effettivamente un processo a se stante(i.e. background compiling in
Builder, oggetti con "vita propria" che interagiscono tra loro...)
tenere viva la finestra mentre sto caricando un immagine non mi sembra
giustifichi l'utilizzo di un thread separato
ciao
Ermando

giustifichi l'utilizzo di un thread separato
Vedi sopra.
Lo scaricamento di una immagine presuppone il richiamo di
una procedura di download, che presumibilmente e' bloccante.
-- 
The Follet

 una procedura di download, che presumibilmente e' bloccante.
ocio, se la procedura e' bloccante (ossia non ritorna il controllo al
programma) ciccia  fetching, ovviamente... ProcessMessages non viene
neanche chiamata
ehmmm... ok, questo e' un classico caso da thread ;)

neanche chiamata
ProcessMessages non viene MAI chiamata, se non e' l'utente a
farlo.  E' una forzatura.
-- 
The Follet

 farlo.  E' una forzatura.
FunzioneBloccante();
Application->ProcessMessages();
ufff... non viene chiamata nel senso che non viene fatto il jump
all'indirizzo di ProcessMessages fino a che la funzione precedente non ha
ricaricato nel program counter l'indirizzo salvato in stack. va bene cosi?
ciao
Ermando

 ricaricato nel program counter l'indirizzo salvato in stack. va bene cosi?
Quello che sto cercando di farti capire e' che non serve a 
niente chiamare ProcessMessages() se hai una funzione 
bloccante.  ProcessMessages() e' una forzatura che si 
inietta in un loop per consentire all'applicazione di fare un
refresh delle operazioni ad ogni iterazione.
-- 
Posted from  [80.105.34.80] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 refresh delle operazioni ad ogni iterazione.
ho capito benissimo, quello che non avevo capito e' che la funzione di
mieru era "bloccante" (io, che probabilmente in maniera pedante ragiono
ancora come se sotto tutto quello strato di eventi e messaggi che e'
windows ci sia ancora un processore che esegue delle istruzioni, preferisco
dire che non rilascia il controllo)
pensavo che stesse facendo polling per scaricare i dati di un immagine.
Ovvio e' che se viene chiamata un unica funzione e questa non rilascia il
controllo non esiste un posto in cui inserire il fetching della coda dei
messaggi, e che se metto ProcessMessages() dopo la funzione "bloccante" il
fetching viene fatto dopo che la funzione ha rilasciato il controllo.
Troppo tardi ovviamente. in questo senso non viene chiamata...
ciao
ermando

[stracut]
Grazie di cuore a tutti e due :) ora sto provando ad usare un thread 
separato ma sono nuovamente nelle grane, non riesco proprio a creare 
dinamicamente un NMHTTP all'interno del thread, la dicitura: 
 TNMHTTP *myHttp; 
mi provoca "type name expected".
Sono sicuro che mi sto perdendo in un bicchiere d'acqua.
Mieru

 Sono sicuro che mi sto perdendo in un bicchiere d'acqua.
Fatto, per la cronaca bisogna includere:
#include <NMHttp.hpp>
#include <Psock.hpp>
Mieru
che si vergogna un po'