Logo UGIdotNET

Condividere dati fra applicazioni

A volte può essere necessario condividere dati fra più applicazioni. Una soluzione "classica" consiste nel creare memory mapped files, o files fisici, o tabelle di database di appoggio e così via. Una possibile alternativa consiste nel creare una DLL che non condivida solamente codice (come comportamento standard), ma anche dati.
Ad esempio, considerando un banale contatore possiamo mettere nel shared segment il valore attuale del contatore. Il seguente codice (possibile solo in MC++), crea proprio quest'area di memoria di nome .counter:

#pragma data_seg(".counter")
int _counter = 0;
#pragma data_seg()
#pragma comment(linker, "/SECTION:.counter,RWS") // RWS sta per Read, Write, Shared

A questo punto basterà creare una classe (thread-safe) che si occupa della gestione del contatore:

public __gc class Counter
{
public:
 __property static int get_Count()
 {
  return _counter;
 }
 static void Increment()
 {
  System::Threading::Interlocked::Increment(&_counter);
 }
 static void Decrement()
 {
  System::Threading::Interlocked::Decrement(&_counter);
 }
};

Usando questa classe da una qualsiasi applicazione, si vedrà che il valore del contatore è condiviso fra tutte le istanze.

Autore: Pierre Greborio
Data: 22 maggio 2003
Ultimo aggiornamento: 23 luglio 2004
Categorie: 

© 2001 User Group Italiano UGIdotNET. Tutti i diritti riservati. Note legali. - Partita IVA 01927050185