Newsgroup: it.comp.lang.visual-basic
Titolo: ignoranza bestiale

Buongiorno al newsgroup:
avrei un problema da sottoporre.
Ho creato una ACTIVE X EXE che utilizzo come server di monitoraggio ed invio
newsletter.
Ora, all'interno della mia ACTIVE X esiste una classe che chiameremo
news_server che si occupa di spedire uno ad uno dei messaggi ad un gruppo di
utenti.
All'interno dell'ACTIVE X effettuo più controlli contemporanei su di
un'unica coda di stampa per verificare se esistono lavori da spedire.
Ora avendo ipotizzato un numero massimo di spedizioni contemporanee pari a
quattro mi capita di creare nuovi quattro oggetti di tipo news_server che,
alemno pensavo, spediscono contemporaneamente i messaggi.
La cosa strana è che in realtà la spedizione non avviene in contemporanea,
come avevo supposto, bensì la procedura attende prima la fine delle
spedizioni del quarto oggetto news_server, poi del terso, poi del
secondo....
Esiste una spiegazione logica oppure è un modo contorto di realizzare
un'applicativo dato da me?
Grazie.


Prima di poterti dare un spiegazione logica è necessario che tu ci fornisca
informazioni + dettagliate.
Saluti

Allanon, vai... Questo e' un buon thread per il tuo messaggio standard :P
Ciaotutti,
Asterix

allora ti spiego meglio l'applicazione.
Si chiama NWS.exe, la si lancia, gli si indicano alcuni dati tipo nome del
server dove sono contenuti i ds, utente password....
a questo punto creo una connessione al db che contiene una coda di
spedizione implementata da altre applicazioni.
Nel mio EXE ho una classe pubblica che si chiama NEWS_SERVER
una volta impostate alcune proprietà della classe c'è un metodo che si
chiama EXECSEND che si occupa di prendere tutti gli indirizzi degli utenti
da un database, aprire una connessione con un server smtp e spedire i
messaggi. fatto questo termina la Public Sub.
Nella form del modulo exe invece ho inserito quattro controlli timer che
verificano ogni cinque secondi l'esistenza di un nuovo processo di
spedizione nel database, se lo trovano inizializzano un oggetto di tipo
news_server e lanciano il metodo EXECSEND.
Non mi interessa nulla della sincronizzazione, il problema è che io mi
aspettavo di vere partire contemporaneamente fino a quattro spedizioni
invece il problema è che non sono in simultanea.
voglio dire, al limite io vi posso postare tutto il codice...
grazie

 ha scritto nel messaggio
news:9fnj3b$55up2$1...@ID-68324.news.dfncis.de...


 Ditemi, devo ridere?
No, dovresti piangere...
--------------------------------------------
Questo é un messaggio di risposta standard e quindi impreciso, viene inviato
in genere a chi si é da poco affacciato al NG e potrebbe non contenere le
risposte in maniera diretta...
1)  Controlla il subject! Subject tipo: "Aiutooooo", "!!!", "Non ci sto più
dentro", "Sto impazzendo" sono subject che vengono filtrati da quasi
tutti... (Escluso il sottoscritto ancora per un po') e quindi non vengono
nemmeno letti dal 90% dei partecipanti (forse meno, ma comunque tanti)
2) Prima di postare sul NG sarebbe bene seguire un certo iter:
    a) Cercare nell' Help (alias MSDN ove possibile)
    b) Cercare nei vecchi post... Se ne hai pochi... non c'é problema, qui
ci sono quelli degli ultimi 6 anni (circa):
 
http://groups.google.com/advanced_group_search
    c) Cercare sul sito comune 
http://www.it_lang_vb.net
...Comunque almeno i post vecchi, MSDN e il subject sono vitali...
                        Ciao
                                Allanon
--------------------------------------------
Come pensi di ritrovare la risposta di Fox se per caso ti si rompesse l'HD e
perdessi le copie salvate?
Voglio vederti a capire il topic che avevi usato. Il che peraltro rende
assolutamente inutile  il tuo post per tutti quelli con lo stesso problema.
Ciaotutti,
Asterix (tra poco i filtri si stringono ancora...)

 ha scritto nel messaggio
news:9fnn0l$53asd$1...@ID-68324.news.dfncis.de...


 Ho troppa figa intorno per piangere...
Nonche' per imparare a quotare...
Benebene...
Appena mi scadono le watch stringo di nuovo i filtri...
SebaMix, sto arrivando...
Ciaotutti,
Asterix

> Ho troppa figa intorno per piangere...
Beato te... :)
Anche perché non varrebbe proprio la pena di piangerci sopra... :)
A quanto pare sono ormai considerato un cazziatore... :(
In realtà é proprio quello che non vorrei essere... Il mio "messaggio
standard" vorrebbe essere una "dritta" per chi "frequenta poco il NG" e
qualche volta "commette un piccolo errore"... Visto che non conservo memoria
storica della gente a cui lo invio può darsi che mi capiti anche di fare
casini ogni tanto... PER FAVORE NESSUNO SI INKAZZI... Lo ribadisco... NON E'
UN CAZZIATONE... é un suggerimento (anzi 3)... Sai, su questo NG arrivano
2/3 cento messaggi al giorno (ma si erano toccate punte peggiori)... Se
vogliamo che sopravviva e non scada sotto un certo livello... dobbiamo
cercare di impegnarci... Per questo c'é il "messaggio standard"... Spero che
nessuno se la prenda...
                Ciao
                    Allanon
P.S.= Grazie Asterix... Aiutami anche tu... il messaggio standard é primo di
copyright!  ;)

 un'applicativo dato da me?
Questo e' normale perche' le 4 istanze della tua classe sono comunque
racchiuse in un unico thread di esecuzione.
In un Exe ActiveX hai comunque la possibilita' di attivare piu' thread per
le tue classi, prova a cercare sulla guida "Sviluppo di componenti
out-of-process a thread multipli" oppure "Scalabilità e multithreading".
Ciao
--
Luca Dormio
luca....@tin.it


Vorrei appofondire questo punto, perchè non mi tornano i conti. Non ho
risposte, solo dubbi.:)
Dunque se usa 4 timer è sicuramente in grado di creare 4 istanze
dell'oggetto che coesistono, e di avviarle tutte e 4. Ora, anche se il
thread di partenza è uno, i 4 oggetti sono out of process, e quindi
proseguono la loro elaborazione in modo autonomo (almeno credo!). quindi
secondo me quello che viene serializzato è il ritorno del controllo al
thread chiamante, che per forza di cose non può evidentemente avvenire in
parallelo.
Mi sbaglio ?
Se qualcuno conosce la risposta precisa si faccia avanti, per favore !
Ciao
Alfonso

 Alfonso
Sinceramente non so bene come funzioni però io posso dire questo:
ogni timer crea un oggetto nuovo, una nuova istanza ad esso. La prima
operazione che fa l'oggetto è di aggiungere un nuovo nodo in una lista ad
albero che mi serve per capire cosa sta spedendo, a quante persone e lo
stato di avanzamento. Credo di poter affermare che i quattro oggetti vengono
creati tutti perché io vedo tutti e quattro i nodi apparire sullo schermo.
il problema è che poi lavorano solo uno alla volta aspettando che quello
dopo di loro abbia terminato il proprio lavoro.
una nota la voglio fare, sono tre giorni che programmo in vb, prima facevo
tutto in ASP e vbscript.... certo c'è grossa libertà ma cavolo è impossibile
trovare della documentazione decente.... non dico altro.
Comunque questo newsgroup è molto apprezzato da me.
stefano

 > thread di partenza č uno, i 4 oggetti sono out of process, e quindi
[...]

 parallelo.
Se il progetto server e' stato impostato per un unico thread (che e' il
default di VB,  "pool di thread: 1") allora con i timer riesci a rendere
*l'avvio* delle 4 elaborazioni asincrono, ma l'esecuzione all'interno del
server e' serializzata (non il ritorno, proprio l'esecuzione) sempre perche'
il thread rimane comunque unico.
Infatti ho provato a scrivere 2 piccoli exe ActiveX con una classe di cui
vengono create le famose 4 istanze in una terza applicazione; ciascuna
istanza espone un metodo con un ciclo variabile tra 200 e 10.000 iterazioni
eseguito in maniera asincrona con relativo timer (SetTimer+KillTimer) e
evento di notifica completamento.
Nell'ActiveX impostato come thread singolo si nota appunto che, nonostante
l'esecuzione asincrona, il completamento del ciclo piu' veloce viene
comunque subordinato alla fine di quelli piu' lenti, con la tendenza ad
eseguire le procedure in ordine inverso (cioe' l'ultima istanza creata e'
quella che termina prima, indipendentemente dalla lunghezza).
Nel secondo server, compilato con l'opzione "un thread per oggetto", il
comportamento invece e' differente, ovvero le istanze che eseguono cicli
piu' veloci terminano sempre prima di quelle con cicli lenti, e quello con
cicli uguali tendono a terminare contemporaneamente.
Non e' niente di particolarmente sofisticato ma per fare qualche prova
funziona... se vi interessa fate un fischio!


Sì, mi interessa ma non ho capito bene.
A me pare di aver provato con diverse procedure di compilazione singolo
thread, 7, 8 10... thread ...
insomma mi pare che tutto abbia avuto conseguenze nulle. dio come mi trovo
impacciato... però non ho gestito gli oggetti withevents...  può dipendere
da questo?
s
"Luca Dormio" <lucaFAV...@tinFAVA.it> ha scritto nel messaggio
news:9fqbga$t8u$1...@fe1.cs.interbusiness.it...


 1,
'le due istanze usano 2 thread differenti
Set o1 = CreateObject("Server.Classe")
Set o2 = CreateObject("Server.Classe")
'Se pero' "Metodo" e' sincrono, il comportamento normale di VB,
'allora il secondo thread comunque non puo' partire perche' e' il
'codice del client, cioe' questo qui, ad essere bloccato tra una chiamata e
l'altra
o1.Metodo
o2.Metodo
Ti ho mandato il mio piccolo test via email, guarda un po' se ti puo' essere
utile...
