Indice del forum
infoe4a.it - Il Forum NON UFFICIALE degli utenti e4a
 REGOLAMENTOREGOLAMENTO   FAQ  FAQ   Cerca  Cerca   Lista utenti  Lista utenti   Gruppi  Gruppi CHAT  CHAT   Phoogle Map  Phoogle Map
Registrati  ::  Log in Messaggi privati


Nuovo argomento  Rispondi
 Visual Basic.NET « Precedente :: Successivo » 
Autore Messaggio
DaveDevil
MessaggioInviato: Dom Dic 28, 2008 3:12 am    Oggetto: Visual Basic.NET Rispondi citando




Registrato: 07/01/07 02:34

Messaggi: 1372
Residenza: Casa mia (Veggiano)

Ho un problemino di programmazione:

Ho un programma, che chiamerò MASTER e vari altri detti SLAVE completamente indipendendi (non sono compilati insieme).

Il primo programma ha delle variabili, che io voglio che vengano recepite anche dai programmi detti slave.

per esempio, dal programma MASTER modifico la variabile "colore", voglio che gli altri programmi si accorgano di questa modifica...

ho provato utilizzando i socket, creando una connessione TCP tra il master e gli slave, ma la cosa è pesantissima per il computer.

ora sto facendo una prova utilizzando una DLL come "botte di variabili" e facendo in modo che i programmi vi accedano, ma da quel che vedo ogni programma si crea una sua istanza della DLL, e quindi le modifiche del MASTER è come se non fossero mai state fatte per gli SLAVE.

premetto che la mia "ampia" conoscenza di Basic.NET proviene prevalentemente da forum, guide ecc...

probabilmente esiste qualche "trucco" di cui io sono all'oscuro...

qualcuno riesce a darmi una mano?!?
_________________


FdO: Ma le sembra il modo di correre?
Dave: Non sto correndo troppo forte, sto volando troppo piano!
This post doesnot have score yet, be the first to comment:    
The copyright belongs to DaveDevil and infoe4a.it - Il Forum NON UFFICIALE degli utenti e4a, no authorized actions like re-post are strictly prohibited.
Top
Profilo Invia messaggio privato MSN
Sponsor
r3lative
MessaggioInviato: Dom Dic 28, 2008 3:43 am    Oggetto: Rispondi citando

BANNATO


Registrato: 03/05/07 00:27

Messaggi: 7340
Residenza: Saccolongo - PD - ITALY - terzo pianeta a sinistra

premesso che vb* nelle varie interpretazioni lo evito come la peste....

se i programmi sono indipendenti, in genere si usano dei file (txt o ini) oppure scrivi sul registry.

ovviamente molto dipende dalla frequenza con cui devi scrivere/leggere.

se si tratta (come spero) di parametri di funzionamento che vengono scritti una tantum e vengono letti dai programmi per inizializzare il programma stesso, allora la cosa più semplice è appunto un file o il registry.

se invece si tratta di comunicazioni tra i programmi, allora la strada del socket tcp o i programmi che usano l'exe come dll, ma dipende da cosa si puo fare e tu sai fare con vb.
_________________
“Mai argomentare con un idiota;
ti fa scendere al suo livello e ti batte per esperienza ”
r3lative blog
This post doesnot have score yet, be the first to comment:    
The copyright belongs to r3lative and infoe4a.it - Il Forum NON UFFICIALE degli utenti e4a, no authorized actions like re-post are strictly prohibited.
Top
Profilo Invia messaggio privato Invia e-mail HomePage Phoogle Map
dev/null
MessaggioInviato: Dom Dic 28, 2008 11:13 am    Oggetto: Rispondi citando




Registrato: 13/09/07 16:33
Età: 22
Messaggi: 1091
Residenza: JN55VL

Non conosco bene VB (lo odio pure io Very Happy ) e non ho mai usato le DLL, però ti posso dire che la condivisione di risorse tra più processi è in genere regolata dal sistema operativo, sia perché per accedere a risorse condivise sono necessari meccanismi di arbitraggio, sia perché hai bisogno di primitive che risultino atomiche.

Scrivere su file per comunicare non è una cosa che mi piace come concetto... e credo comporti meno overhead una comunicazione con protocolli di rete tra i programmi chiamati in causa.

O altrimenti cerca cosa mette a disposizione Windows per la programmazione interprocesso...
_________________
The ideas of economists and political philosophers, both when they are right and when they are wrong, are more powerful than is commonly understood. Indeed the world is ruled by little else. Practical men, who believe themselves to be quite exempt from any intellectual influence, are usually the slaves of some defunct economist. Madmen in authority, who hear voices in the air, are distilling their frenzy from some academic scribbler of a few years back. I am sure that the power of vested interests is vastly exaggerated compared with the gradual encroachment of ideas. -- J.M. Keynes
This post doesnot have score yet, be the first to comment:    
The copyright belongs to dev/null and infoe4a.it - Il Forum NON UFFICIALE degli utenti e4a, no authorized actions like re-post are strictly prohibited.
Top
Profilo Invia messaggio privato
r3lative
MessaggioInviato: Dom Dic 28, 2008 12:50 pm    Oggetto: Rispondi citando

BANNATO


Registrato: 03/05/07 00:27

Messaggi: 7340
Residenza: Saccolongo - PD - ITALY - terzo pianeta a sinistra

depende sempre da quello che devi fare.


se devi condividere solo alcuni parametri di inzializzazione e configurazione del programma, il file o il registry vanno benissimo (scrivi 1 volta, leggi all'apertura, memorizzi, e chiudi).
se invece devi stabilire comunicazioni "intensive" tra i vari programmi, allora socket o dll, o altre strutture, in base alle conoscenze ed esigenze.

ho spesso visto usare cannoni per sparare a mosche ... diamoci la misura Wink

un po come quelli che usano oracle per memorizzare i dati dell'agenda, o sqlserver per memorizzare le liste mp3 dei 50 CD e 12 film ....



ciao

ps il primo l'ho visto sul serio
i secondi, sono molto, ma molto diffusi ...
_________________
“Mai argomentare con un idiota;
ti fa scendere al suo livello e ti batte per esperienza ”
r3lative blog
This post doesnot have score yet, be the first to comment:    
The copyright belongs to r3lative and infoe4a.it - Il Forum NON UFFICIALE degli utenti e4a, no authorized actions like re-post are strictly prohibited.
Top
Profilo Invia messaggio privato Invia e-mail HomePage Phoogle Map
DaveDevil
MessaggioInviato: Dom Dic 28, 2008 10:51 pm    Oggetto: Rispondi citando




Registrato: 07/01/07 02:34

Messaggi: 1372
Residenza: Casa mia (Veggiano)

beh, la quantità di dati è elevata, e sopratutto variabile molto frequentemente.

utilizzando i socket ho già provato, purtroppo la connessione di più programmi via TCP al programma principale, fa si che vengano occupate troppe risorse...

vorrei sapere qualcosa in più per le DLL.

ho creato una dll con una decina di variabili. Accedendo con il programma server, riesco a modificare il valore di ciascuna variabile, modifica che però non viene minimamente vista dagli altri programmi che vanno a leggere la stessa dll...

presumo che ogni programma si crea al momento dell'avvio una propria istanza della dll!
_________________


FdO: Ma le sembra il modo di correre?
Dave: Non sto correndo troppo forte, sto volando troppo piano!
This post doesnot have score yet, be the first to comment:    
The copyright belongs to DaveDevil and infoe4a.it - Il Forum NON UFFICIALE degli utenti e4a, no authorized actions like re-post are strictly prohibited.
Top
Profilo Invia messaggio privato MSN
dev/null
MessaggioInviato: Lun Dic 29, 2008 1:25 am    Oggetto: Rispondi citando




Registrato: 13/09/07 16:33
Età: 22
Messaggi: 1091
Residenza: JN55VL

Chiaro, perché ogni programma ha il proprio segmento di memoria. Non so però come venga gestito il caricamento delle DLL e né come si acceda alle risorse di una DLL, però è normale che di default non venga condiviso nulla.
Le condivisioni di risorse e le comunicazioni tra processi sono gestite dal sistema operativo (e non potrebbe essere altrimenti), che mette a disposizione degli strumenti: in Linux/Unix ci sono le IPC, in Windows non ti so dire, qualcosa ci sarà.

A me pare comunque strano che una comunicazione TCP occupi troppe risorse, più che altro perché il throughput richiesto mi sembra irrisorio... ho avuto a che fare con programmi che scambiavano dati via TCP un centinaio di volte al secondo... e sicuramente non era un granché come prestazione.
Ma crei una nuova connessione ogni volta che i programmi devono comunicare oppure usi sempre la stessa?

P.S.: leggo su Wikipedia che le DLL vengono caricate nel segmento di memoria del processo che le usa, quindi ogni processo se la carica e accede al proprio orticello. Wink
_________________
The ideas of economists and political philosophers, both when they are right and when they are wrong, are more powerful than is commonly understood. Indeed the world is ruled by little else. Practical men, who believe themselves to be quite exempt from any intellectual influence, are usually the slaves of some defunct economist. Madmen in authority, who hear voices in the air, are distilling their frenzy from some academic scribbler of a few years back. I am sure that the power of vested interests is vastly exaggerated compared with the gradual encroachment of ideas. -- J.M. Keynes
This post doesnot have score yet, be the first to comment:    
The copyright belongs to dev/null and infoe4a.it - Il Forum NON UFFICIALE degli utenti e4a, no authorized actions like re-post are strictly prohibited.
Top
Profilo Invia messaggio privato
r3lative
MessaggioInviato: Lun Dic 29, 2008 1:40 am    Oggetto: Rispondi citando

BANNATO


Registrato: 03/05/07 00:27

Messaggi: 7340
Residenza: Saccolongo - PD - ITALY - terzo pianeta a sinistra

consiglio... verifica di usare correttamente i socket ... in genere funzionano molto bene, sono leggeri e performanti.

ciao
_________________
“Mai argomentare con un idiota;
ti fa scendere al suo livello e ti batte per esperienza ”
r3lative blog
This post doesnot have score yet, be the first to comment:    
The copyright belongs to r3lative and infoe4a.it - Il Forum NON UFFICIALE degli utenti e4a, no authorized actions like re-post are strictly prohibited.
Top
Profilo Invia messaggio privato Invia e-mail HomePage Phoogle Map
DaveDevil
MessaggioInviato: Lun Dic 29, 2008 3:00 am    Oggetto: Rispondi citando




Registrato: 07/01/07 02:34

Messaggi: 1372
Residenza: Casa mia (Veggiano)

r3lative ha scritto:
consiglio... verifica di usare correttamente i socket ... in genere funzionano molto bene, sono leggeri e performanti.

ciao


dato che non esistono metodi particolari...

il programma master usa il listener, che ogni secondo accetta le eventuali richieste di connessione (polling).

poi, spara via tcp a chiunque sia connesso una infinità di dati (tramite stringa).

il problema sorge quando utilizzo più di un programma per la ricezione: va in timeout e tenta di riconnettersi (perchè se entro X tempo non ricevo almeno Y caratteri, per me la connessione è interrotta).

il problema è che il client utilizza circa (da task manager) il 10 % della cpu!
_________________


FdO: Ma le sembra il modo di correre?
Dave: Non sto correndo troppo forte, sto volando troppo piano!
This post doesnot have score yet, be the first to comment:    
The copyright belongs to DaveDevil and infoe4a.it - Il Forum NON UFFICIALE degli utenti e4a, no authorized actions like re-post are strictly prohibited.
Top
Profilo Invia messaggio privato MSN
r3lative
MessaggioInviato: Lun Dic 29, 2008 4:29 am    Oggetto: Rispondi citando

BANNATO


Registrato: 03/05/07 00:27

Messaggi: 7340
Residenza: Saccolongo - PD - ITALY - terzo pianeta a sinistra

premesso che non conosco vb.net, e quindi non so come gestisce i socket ...

io (con delphi, ma la cosa è analoga a tutti i linguaggi su cui ho messo mano) non definisco un polling per l'ascolto della porta tcp/ip, ma definisco degli eventi, ovvero quando sulla porta XYZ arrivano dati, viene eseguito il tale evento, che riceve la stringa di dati, e la gestisce in qualche modo.

il fatto di usare polling, mi fa sorgere il dubbio che in realta tu non gestisca il socket, ma un qualcosa che ingloba il socket, e che gestisce a più alto livello la comunicazione.

tieni presente che tutti i miei programmi hanno una porta di controllo tcp/ip che comunica agli altri pc lo scatenarsi di determinati eventi (tipo chiusura forzata del programma, invio di msg, avvisi di aggiornamenti, ecc)

l'occupazione di cpu è 0, mentre è in attesa, in fase di gestione, ovviamente dipende da cosa deve fare (visualizzare un msg a video, è molto diverso da scaricare dei log, o forzare la chiusura del programma con relativi controlli e chiusure di db, ecc)

i problemi tipici delle comunicazioni di questo tipo sono i memory leak, i tempi (sequenze, time-out, ecc) e gestione del protocollo di scambio dati... per il resto non ho mai avuto particolari problemi ...


PS
rileggendo meglio, tu dici che da un singolo programma, vuoi inviare dati a n altri programmi. ok, ovviamente ogni altro programma deve avere una porta d'ascolto diversa (dato che sei sullo stesso pc) ed inoltre il programma che invia deve avere una lista dei programmi/porte a cui trasmettere.

es
server porta 10000
client1 porta 10001
client2 porta 10002,
ecc

porte sempre superiori alla 1024 (e anche qualcosa in più Wink ), mi raccomando
_________________
“Mai argomentare con un idiota;
ti fa scendere al suo livello e ti batte per esperienza ”
r3lative blog
This post doesnot have score yet, be the first to comment:    
The copyright belongs to r3lative and infoe4a.it - Il Forum NON UFFICIALE degli utenti e4a, no authorized actions like re-post are strictly prohibited.
Top
Profilo Invia messaggio privato Invia e-mail HomePage Phoogle Map
krakatoa
MessaggioInviato: Mar Dic 30, 2008 10:45 am    Oggetto: Rispondi citando




Registrato: 05/09/07 20:12
Età: 25
Messaggi: 118

Se le informazioni che devi passare non sono complesse o particolari, prova con le classiche variabili d'ambiente di windows....
This post doesnot have score yet, be the first to comment:    
The copyright belongs to krakatoa and infoe4a.it - Il Forum NON UFFICIALE degli utenti e4a, no authorized actions like re-post are strictly prohibited.
Top
Profilo Invia messaggio privato
DaveDevil
MessaggioInviato: Mar Dic 30, 2008 8:36 pm    Oggetto: Rispondi citando




Registrato: 07/01/07 02:34

Messaggi: 1372
Residenza: Casa mia (Veggiano)

krakatoa ha scritto:
Se le informazioni che devi passare non sono complesse o particolari, prova con le classiche variabili d'ambiente di windows....


???

devo passare molti dati, ma sono tutti o interi cha vanno da 0 a qualche migliaio, o numeri con doppio decimale...


in ogni caso, non mi è possibile creare più porte di ascolto nel programma server, in quanto la creazione dei client voglio che sia completamente estranea a tutto il resto. facendo come dici, utilizzando varie porte, dovrei ricordarmi nell'ultimo programma quale porta è stata usata, ed incrementarla...
_________________


FdO: Ma le sembra il modo di correre?
Dave: Non sto correndo troppo forte, sto volando troppo piano!
This post doesnot have score yet, be the first to comment:    
The copyright belongs to DaveDevil and infoe4a.it - Il Forum NON UFFICIALE degli utenti e4a, no authorized actions like re-post are strictly prohibited.
Top
Profilo Invia messaggio privato MSN
r3lative
MessaggioInviato: Mar Dic 30, 2008 9:02 pm    Oggetto: Rispondi citando

BANNATO


Registrato: 03/05/07 00:27

Messaggi: 7340
Residenza: Saccolongo - PD - ITALY - terzo pianeta a sinistra

DaveDevil ha scritto:
in ogni caso, non mi è possibile creare più porte di ascolto nel programma server, in quanto la creazione dei client voglio che sia completamente estranea a tutto il resto. facendo come dici, utilizzando varie porte, dovrei ricordarmi nell'ultimo programma quale porta è stata usata, ed incrementarla...


???

il server ha una porta (10000) aperta, e si connette agli altri client tramite le loro porte, ovvero si connette a "client1 = localhost:10001", "client 2 = localhost:10002", ecc facendo una scansione

non puoi avere più programmi in ascolto tutti sulla stessa porta (dello stesso pc), mentre è vero il viceversa, ovvero più programmi che si connettono alla stessa porta.

la porta che apri in uscita, è selezionabile e non è necessariamente la stessa (anzi, di solito non lo è mai) a cui devi connetterti.

in soldoni...
da server (in ascolto sulla porta 10000, ma potrebbe anche essere chiusa, in quanto non usata), ti connetti al client1 (in ascolto sulla porta 10001) usando la porta 32643 (random, di solito i socket lo possono gestire in automatico, oppure la assegni tu pensandoci un attimo) in uscita, ecc

volendo (e sapendolo gestire, non è banale) potresti anche fare viceversa, un unica porta aperta (la 10000) sul server, e tutti i client si connettono a quella porta, poi da server fai la scansione dei client collegati e invi loro i dati. attenzione che in questo caso le cose sono un po più difficili da gestire
_________________
“Mai argomentare con un idiota;
ti fa scendere al suo livello e ti batte per esperienza ”
r3lative blog
This post doesnot have score yet, be the first to comment:    
The copyright belongs to r3lative and infoe4a.it - Il Forum NON UFFICIALE degli utenti e4a, no authorized actions like re-post are strictly prohibited.
Top
Profilo Invia messaggio privato Invia e-mail HomePage Phoogle Map
Mostra prima i messaggi di:   
Nuovo argomento  Rispondi Pagina 1 di 1

Vai a:  
Discussioni simili
Argomenti Autore Risposte Consultazioni Ultimo messaggio
Non ci sono nuovi messaggi Il mio primo sito
Artic 15 559 Ven Lug 25, 2008 5:50 pm
Artic Leggi gli ultimi messaggi
Non ci sono nuovi messaggi aiuto installazione router wifi (il mio primo router )
mattiagonzo 4 905 Dom Mar 30, 2008 1:44 am
dev/null Leggi gli ultimi messaggi
Non ci sono nuovi messaggi [ Sondaggio ] Attivazione registrazione al Forum
marte_57 19 3098 Lun Set 24, 2007 10:49 am
r3lative Leggi gli ultimi messaggi
Non ci sono nuovi messaggi problemi con il forum (cancellate i cookie!!)
DaveDevil 37 983 Ven Giu 15, 2007 11:38 am
gazal Leggi gli ultimi messaggi
Non ci sono nuovi messaggi Orario solare forum?
DaveDevil 2 209 Mar Mar 27, 2007 1:02 pm
coach Leggi gli ultimi messaggi



Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi


Powered by phpBB © 2001, 2005 phpBB Group