Corso di Visual C++ (terza lezione)

Il Sistema di smistamento dei messaggi. Questa puntata sul sistema di gestione dei messaggi di Windows è purtroppo più teorica che pratica, ma è assolutamente necessario comprenderla bene per proseguire con il corso.



[ZEUS News - www.zeusnews.it - 14-06-2001]

Leggi la seconda puntata del corso

Già avete letto la prima parola nuova: messaggi. Infatti il S.O. (Sistema Operativo) Windows basa il suo funzionamento sull'invio e la ricezione di messaggi che si verificano in seguito all'interazione tra voi e la macchina. Ad esempio la pressione di un tasto invierà un messaggio alla finestra attiva in quel momento, idem per i movimenti del mouse e i relativi clic; meno ovvio è invece che vengano mandati dei messaggi dal vostro programma al s.o.; ciò si verifica ad esempio quando voi nascondete una finestra e una volta che questa riappare ha bisogno di essere ridisegnata, oppure quando il vostro programma richiede dei dati relativi allo schermo o allo screensaver.

Quindi mentre con il modello di programmazione tradizionale eravate abituati alla funzione main(), ora con Windows ve ne dovrete dimenticare. Prima era possibile sapere esattamente cosa faceva il programma in ogni istante, infatti main () poteva richiamare delle funzioni e queste ancora altre, ma tutto seguiva un preciso iter logico che dipendeva solo dall'interazione con l'utente; in Windows, invece, è il sistema operativo che determina cosa eseguire in un determinato istante e cosa in quello successivo. Ovviamente molte di queste operazioni avvengono a causa dell'utente, ma per voi è impossibile ipotizzare che subito dopo ad es. un clic del mouse venga richiamata la vostra funzione che se ne occupa, infatti il s.o. potrebbe decidere di finire prima lo scandisk, di rigenerare la finestra di un'altra applicazione, di chiudere lo screensaver e mille altre cose.

I programmi Windows utilizzano un modo di operare definito event-driven (guidato dagli eventi) e si occupano quindi solo di gestire i messaggi che vengono inviati loro dal s.o. e non sanno a priori cosa fare quando hanno ultimato tale compito. Questo modo di procedere è dovuto al fatto che Windows è un ambiente multiprocessing e multitasking è cioè capace di eseguire più operazioni contemporaneamente e in modo del tutto trasparente per l'utente. Come potrete intuire ciò non può essere del tutto vero (in particolare in sistemi single-processor), ma l'effetto finale è quello; infatti il s.o. si occupa di gestire il tempo della cpu e di ripartirlo tra le varie applicazioni aperte in un dato momento.

É per questo motivo che un programma non ha un singolo cammino di esecuzione, ma deve aspettare che il sistema operativo gli dica cosa fare, e con Windows a 32 bit (i successori della versione 3.11) non può neanche fare in modo che una funzione impieghi troppi cicli macchina perché senza che se ne accorga verrà interrotto e ripreso più tardi quando le altre applicazioni avranno finito il loro compito.

Tutto questo processo noto come Scheduling è molto complesso e deve tenere in considerazione anche il fatto che ogni programma ha delle priorità in base alla sua importanza e in base al tempo che è trascorso da quando è stato messo in pausa; tutto ciò è anche alla base delle differenze, con sistemi multi-processing, tra Windows 95-98 ed NT.

Da ora in poi quando un programma è in esecuzione lo chiameremo processo, e non ci occuperemo del fatto che è attualmente in esecuzione o in pausa, dato che ciò non è da noi rilevabile (non siamo ancora dei GURU); infatti se dal programma chiedessimo se è attualmente in esecuzione mente è in pausa, dovremmo aspettare che si riattivi per avere la risposta!

Ritorniamo a cose meno teoriche...

Un programma va in esecuzione richiamando la funzione WinMain, questa a sua volta si occupa della creazione di una ‘pompa dei messaggì che si occupa di recuperare i messaggi mandati da Windows, eleborarli e poi richiamare le funzioni del nostro programma che si occupano della loro gestione.

Questa pompa dei messaggi è implementata in una funzione definita WindowProcedure e normalmente si chiama WndProc, ad essa vengono passati come parametri un puntatore alla finestra destinataria, un identificativo del messaggio più altri parametri che serviranno per interpretare il comportamento del messaggio.

Tutto ciò fortunatamente ci è nascosto da MFC, ma lo avremmo dovuto conoscere bene se stessimo programmando con le API; ci è comunque necessario conoscere questi aspetti nascosti per capire bene come funziona Windows e come sfruttarlo a pieno.

Leggi la quarta puntata del corso

A cura di Software Planet il centro di riferimento per i programmatori e i webmaster italiani.
Su Software Planet è possibile trovare oltre a chat, newsletter, librerie di migliaia di script, forum di discussione, anche corsi online gratuiti e scaricabili di Visual C++, Visual Basic, Java, Delphi, ASP, HTML, Perl, PHP, JavaScript, CGI, DirectX, SistemiOperativi, SQL, C con Linux, WML, Logica ed Automi, Privacy, Flash, Dreamweaver, Fireworks, ActionScript...
Per iscriversi alla newsletter mandare un'email vuota a subscribe@softwareplanet.net

Se questo articolo ti è piaciuto e vuoi rimanere sempre informato con Zeus News ti consigliamo di iscriverti alla Newsletter gratuita. Inoltre puoi consigliare l'articolo utilizzando uno dei pulsanti qui sotto, inserire un commento (anche anonimo) o segnalare un refuso.
© RIPRODUZIONE RISERVATA

Commenti all'articolo (1)


La liberta' di parola e' un diritto inviolabile, ma nei forum di Zeus News vige un regolamento che impone delle restrizioni e che l'utente e' tenuto a rispettare. I moderatori si riservano il diritto di cancellare o modificare i commenti inseriti dagli utenti, senza dover fornire giustificazione alcuna. Gli utenti non registrati al forum inoltre sono sottoposti a moderazione preventiva. La responsabilita' dei commenti ricade esclusivamente sui rispettivi autori. I principali consigli: rimani sempre in argomento; evita commenti offensivi, volgari, violenti o che inneggiano all'illegalita'; non inserire dati personali, link inutili o spam in generale.
E' VIETATA la riproduzione dei testi e delle immagini senza l'espressa autorizzazione scritta di Zeus News. Tutti i marchi e i marchi registrati citati sono di proprietà delle rispettive società. Informativa sulla privacy. I tuoi suggerimenti sono di vitale importanza per Zeus News. Contatta la redazione e contribuisci anche tu a migliorare il sito: pubblicheremo sui forum le lettere piu' interessanti.
Sondaggio
Preferisci utilizzare Facebook, Twitter o Google+?
Prevalentemente Facebook
Prevalentemente Twitter
Prevalentemente Google+
Facebook e Twitter
Twitter e Google+
Google+ e Facebook
Tutti e tre
Nessuno dei tre

Mostra i risultati (2805 voti)
Aprile 2024
Enel nel mirino dell'Antitrust per le bollette esagerate
TIM, altre ''rimodulazioni'' in arrivo
L'algoritmo di ricarica che raddoppia la vita utile delle batterie
Hype e Banca Sella, disservizi a profusione
Falla nei NAS D-Link, ma la patch non arriverà mai
La navigazione in incognito non è in incognito
Le tre stimmate della posta elettronica
Amazon abbandona i negozi coi cassieri a distanza
Marzo 2024
Buone azioni e serrature ridicole
Il piano Merlyn, ovvero la liquidazione di Tim
Falla nelle serrature elettroniche, milioni di stanze d'hotel a rischio
L'antenato di ChatGPT in un foglio Excel
La valle inquietante
La crisi di Tim e la divisione sindacale
La fine del mondo, virtuale
Tutti gli Arretrati
Accadde oggi - 29 aprile


web metrics