Sincronizza Indice |
Scarica il progetto |
Testo dell'articolo |
Stampa l'articolo |
Negli ambienti Win32 (Windows 9x/NT/2000) è possibile eseguire più programmi comtemporaneamente. Il sistema dispone infatti di un sistema di multitasking preemptive, per il quale il tempo di esecuzione della CPU viene diviso in varie sezioni ognuna delle quali è detta slice (fetta); ogni sezione ha la durata approssimativamente di 20 millisecondi.
Il sistema, pertanto, assegna un certo numero di slices ai vari task (compiti) in base alla loro priorità rispetto agli altri compiti da eseguire. Questa separazione dei lavori "illude" l'utente che il sistema stia eseguendo più lavori contemporaneamente. Ogni programma in esecuzione è detto Processo
e dispone di un suo spazio di indirizzamento
virtuale privato, che conterrà il codice del processo, i suoi dati
ed altre risorse di sistema, quali i files, i tubi (pipe) e le periferiche
di input e output. Ogni processo viene avviato con un singolo Thread in esecuzione, ma questo può creare nuovi threads e fargli svolgere diverse mansioni. Il sistema allocherà le varie slices di CPU ai singoli threads, in base alla loro priorità di esecuzione. Alla scadenza del tempo di esecuzione assegnato al thread, il sistema
sospende il thread, ne memorizza il contenuto nello spazio di indirizzamento
del processo ed avvia l'esecuzione di un altro thread. Al termine dell'esecuzione
di tutti i thread sospesi, viene riavviato il primo thread, dando così
l'apparenza di sistema multitasking.
La priorità del thread è data dalla somma di tre valori:
Ogni processo ed ogni thread viene identificato da un suo handle
unico. È possibile verificare lo stato di esecuzione di un thread utilizzando la funzione API GetExitCodeThread. Fintanto che il thread è in esecuzione, la funzione restituisce il valore API STILL_ACTIVE (259). Il thread può essere sospeso o fatto ripartire attraverso un altro thread mediante l'utilizzo delle funzioni API SuspendThread e ResumeThread. Un thread può essere terminato in quattro modalità:
Dopo la chiusura del thread il richiamo della funzione GetExitCodeThread restituirà il codice di uscita della funzione eseguita dal thread. Nella sezione HowTo è presente un esempio per creare e chiudere dei threads con Visual Basic.
Un processo, fintanto che è in esecuzione, restituisce alla chiamata GetExitCodeProcess il valore API STILL_ACTIVE (259). La chiusura del processo è invocata in quattro situazioni:
Alla chiusura del processo tutti i files lasciati aperti saranno chiusi
e gli handle degli oggetti sono deallocati soltanto quando tutti i processi
che li utilizzano chiudono tali handle. |
Nella sezione HowTo è presente
un esempio per creare e chiudere un processo
con Visual Basic.
Fibia
FBI
|