Developer Assistant

------------------------------------------

INI Copier v1.00
Un esempio di programma PM Multi-Threaded

Introduzione

Con questa sezione vorrei presentare il sorgente commentato di una piccola utility che ho realizzato di recente. Lo scopo principale è quello di aiutare i programmatori che per la prima volta si scontrano con le API di PM fornendo loro alcuni principi di base che possono rendere più semplice e veloce il difficile compito in cui si stanno avventurando. Visto che anch'io mi sono accostato alla programmazione in PM da molto poco, non pretendo di insegnare niente a nessuno, ma solo di condividere con altri i risultati dei miei sforzi nella speranza che ciò possa incoraggiarli.

Il programma in questione permette di muovere o copiare sezioni dei profile di OS/2 (file .INI). Sicuramente questo programma potrebbe essere realizzato in maniera più semplice, ma il mio scopo è anche quello di familiarizzare con le tecniche che possono essere necessarie per progetti assai più complessi.

Le tecniche che voglio esercitare sono:

  • utilizzo di più thread in PM.
  • gestione delle eccezioni.
  • comunicazione fra thread.
  • finestre con controlli ridimensionabili.
  • sfruttare al massimo le possibiltà offerte dalle risorse compilate con il Resource Compiler.

I files

Prima di tutto vediamo i files di definizioni globali. Nel file resource.h ci sono le definizioni di tutte le costanti in qualche modo connesse con le risorse, mentre nel file global.h ci sono tutte le dichiarazioni delle variabili globali e le funzioni che sono utili in più moduli.

  • resource.h
    Contiene le definizioni delle costanti per identificare le risorse contenute nell'eseguibile.

  • global.h
    Contiene tutte le definizioni comuni a tutti i moduli.

  • Vediamo poi i sorgenti dei vari moduli:

  • main.c
    Questo modulo contiene la funzione main() e le funzioni globali di gestione della memoria.

  • mainwnd.c
    È il modulo principale in cui si trova la funzione che gestisce i messaggi inviati alla finestra principale.

  • threads.c
    Contiene le funzioni relative ai thread di apertura e chiusura di un profilo.

  • list.c
    Gestione le liste contenenti i nomi delle varie sezioni dei profili.

  • error.c
    Contiene tutte le funzioni di gestione degli errori.

  • about.c
    Contiene la funzione che gestisce i messaggi della finestra d'informazione sul programma.

  • Un'altra componente importante del programma sono le risorse:

  • main.rc

  • wndtemp.rc


  • Note

    Nel realizzare questo programma ho cercato di evitare ogni possibilità di blocco della coda dei messaggi del sistema. In seguito mi sono accorto che c'è una particolare situazione in cui si può bloccare l'esecuzione dei messaggi. Ho già pensato a un modo per risolvere il problema, ma ho deciso che può essere un ottimo esercizio per chi ha deciso di studiare il funzionamento di questo programma.
    Ancora una volta ripeto che mi fa piacere ricevere commenti (in senso negativo e positivo) e quindi vi invito a scrivermi. Ovviamente accetto suggerimenti su come migliorare la leggibilità di queste pagine e sono a disposizione per qualsiasi tipo di chiarimento sul codice.


    Immagino che leggersi i listati on-line sia eccessivamente lungo e quindi ho deciso di rendere disponibile un pacchetto compresso contenente tutte le pagine in HTML relative a questo progetto. Inoltre, come mi è stato richiesto da più persone, ho preparato un archivio contenente tutti i sorgenti e l'eseguibile.

    ---------------------------------------------------

    Torna alla nostra HomePage - Pagina a cura di: Giovanni Pagni
    Last modified 1-4-97