Newsgroup: it.comp.lang.visual-basic
Titolo: [?] esecuzione in background

Salve a tutti.
Scrivo per sottoporre alla vostra attenzione un problema che mi sta un
po' infastidendo.
Ho realizzato un programma che utilizzando 2 file compie delle
operazioni piuttosto laboriose e dispendiose in termini di tempo. Visto
che le mie capacità di programmazione (invero scarse) non mi permettono
di ottimizzare ulteriormente il codice, mi chiedevo se ci fosse la
possibilità di far eseguire il programma in background. Premetto che
quando il programma sta lavorando non risponde agli eventi (ad esempio
per minimizzare la finestra il programma attende la fine di ogni
processo in corso). Sostanzialmente vorrei che tramite un pulsante il
programma potesse essere messo in background (o che, insomma, ne venisse
ridotta la priorità) in modo da permettere all'utente di poter fare
altro in attesa della conclusione dl processo, sfruttando una maggior
porzione delle risorse disponibili.
Aggiungo che NON si tratta di una applicazione DB per la quale, presumo,
siano disponibili appositi metodi.
Il programma è realizzato in VB 5.
Grazie a tutti fin d'ora per l'attenzione e per (spero) i suggerimenti.
^_-
Saluti.
P.S. Purtroppo non ho letto le FAQ del NG, quindi vi chiedo scusa se ho
commesso qualche errore nello scrivere il subject e per essermi
sicuramente espresso male...

 wrote in message 388F6970...@libero.it...

Hai provato ad inserire nella parte di codice che blocca il programma un
istruzione 'Doevents'.
E' solo un pagliativo ma dovrebbe consertirti di risolvere il problema degli
eventi spariti.

 Basic 5?
Ottenuta una HANDLE del processo che ti interessa (con le opportune
permission, se sei su NT), l'API SetPriorityClass ti permette di
cambiarne la classe di priorita`.  La piu` bassa di queste classi
e` IDLE_PRIORITY_CLASS, che fa si` che i thread di questo
processo siano messi da parte se QUALSIASI altra cosa e` pronta
a girare -- si tratta della priorita` tipica degli screen-saver; la piu`
alta e` REALTIME_PRIORITY_CLASS, che va riservata per compiti
importantissimi, cruciali, e brevissimi, poiche` i thread di un processo
cosi` settato possono mettere da parte qualsiasi altra operazione,
compreso il passaggio a disco di dati cachati da parte del sistema
operativo et similia.
Normalmente, ci si limita alla classe normale, NORMAL_PRIORITY_CLASS,
e a quella ad alta priorita`, HIGH_PRIORITY_CLASS.  Windows 2000
offre un altro paio di classi di priorita` per una granularita` migliore.
Identificati gli specifici thread di un processo, se ne puo` modulare
la priorita` con piu` precisione usando l'API SetThreadPriority (che
richiede l'uso di un'HANDLE dello specifico thread).
Non e` particolarmente rilevante, per l'uso di queste API, sapere
in quali linguaggi sia stato originalmente scritto il codice eseguibile
che stanno girando i processi e thread che si vogliono controllare.
Alex
********************************************************
L'handle del processo è in pratica il return value della funzione shell. Il
threadId (I threadId)... be', un altro paio di maniche


Se vuoi cambiare la priorità del tuo processo puoi usare queste poche righe
di codice
Dichiarazioni WIN32 API in un modulo BAS:
Public Declare Function GetCurrentProcess Lib "kernel32" () As Long
Public Declare Function SetPriorityClass Lib "kernel32" (ByVal hProcess As
Long, ByVal dwPriorityClass As Long) As Long
Public Const IDLE_PRIORITY_CLASS = &H40
Public Const NORMAL_PRIORITY_CLASS = &H20
Public Const HIGH_PRIORITY_CLASS = &H80
Public Const REALTIME_PRIORITY_CLASS = &H100
Codice per il cambio di priorità:
    dim inst&
    inst = GetCurrentProcess
    SetPriorityClass inst, IDLE_PRIORITY_CLASS
il secondo parametro della funzione è la priorità che vuoi attribuire al
processo, IDLE è la più bassa, in  ordine fino al REALTIME. Attenzione con
IDLE il tuo processo potrebbe rimanere inattivo anche per parecchio tempo,
in base ai processi concorrenti che sono attivi in un dato momento ed alla
loro priorità.
Ciao Luca

Grazie infinite a tutti coloro che mi hanno dato una mano! Mi guarderò i
msg con calma e poi vi saprò dire. Intanto, grazie ancora!
Saluti.


Hai risolto i miei problemi!
Ehm...scusa la botta di ignoranza, ma dove posso trovare tutte le info
sui prototipi delle funzioni che hai consigliato? Nell'help di VB non le
ho trovate (presumo che con VB c'entrino poco essendo API...). In poche
parole: dove potrei reperire una guida alle API di windows? Forse la
richiesta è un po' pretenziosa...
Comunque grazie ancora, il tuo aiuto è stato decisivo!
Ciao, Lupin

 eventi spariti.
DoEvents è stata una genialata (mi serviva anche quello)! Grazie Cepe!
Ciao, Lupin

Ciao puoi trovare le dichiarazioni dell'API WIN32 delle funzioni, tipi e
costanti tramite il "Visualizzatore API", lo trovi nel menu Aggiunte, e se
hai VB6 su MSDN trovi anche la doumentazione.
Ciao Luca



 wrote in message 86ueus$t24$1...@nslave1.tin.it...


 programmazione.
[CUT]
Wow! Grazie della dritta, intanto ho trovato un sito guida alle API che
mi sembra ben fatto (nel senso che ha permesso di comprendere qualcosa
anche a me che programmo a tempo perso), magari puň servire a
qualcun'altro, l'indirizzo č: 
http://www.vbapi.com/
Non č dettagliatissimo (non riporta tutte le API), ma č scritto in un
inglese molto facile da capire.
Ciao e grazie, Lupin

 hai VB6 su MSDN trovi anche la doumentazione.
Arrrghh! Non ho VB6, CMQ penso di aver risolto il problema.
Grazie e ciao, Lupin