Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Broadcast su threads

0 views
Skip to first unread message

Fabio Giliberti

unread,
Jul 21, 2008, 12:04:03 PM7/21/08
to
Ciao a tutti, ho un programma che ogni volta che ricevo via socket dei dati
crea un thread che elabora questi dati e scrive i risultati su un DB.
Nel mainform viene visualizzato il numero attuale di threads in esecuzione e
tutti hanno il flag FreeOnTerminate = TRUE.
A volte ho notato pero' che alcuni threads rimangono attivi (senza occupare
CPU) e non rieco a capire come mai.
Ho fatto un metodo nel mio thread che scrive su un file i propri dati (una
specie di dump) per vedere se ci sono cose che non ho previsto e mi sto
chiedendo se esiste un modo per mandare un messaggio con un sendmessage() a
tutti i threads in esecuzione senza sapere il loro handle o devo
memorizzarmeli e fare un sendmessage per ognuno?
Grazie.

--
-----------------------------------
Fabio Giliberti, Agile Telecom Srl.
MSN: f.gil...@agiletelecom.com
ICQ#: 291157840
Skype: fabio.smsdriver

Andrea Laforgia

unread,
Jul 21, 2008, 12:47:12 PM7/21/08
to
Fabio Giliberti ha scritto:

> A volte ho notato pero' che alcuni threads rimangono attivi (senza occupare
> CPU) e non rieco a capire come mai.

Usi oggetti di sincronizzazione (critical section, mutex, eventi, ecc..)?
Perché č possibile che i thread "freezed" che vedi stiano in attesa ceh
uno di essi entri in stato segnalato...

> Ho fatto un metodo nel mio thread che scrive su un file i propri dati (una
> specie di dump) per vedere se ci sono cose che non ho previsto e mi sto
> chiedendo se esiste un modo per mandare un messaggio con un sendmessage()

Immagino tu intenda PostThreadMessage(). Sě, devi avere tutti gli id e
mandare loro un messaggio.

--

questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ab...@newsland.it


Andrea Laforgia

unread,
Jul 21, 2008, 12:47:50 PM7/21/08
to
Fabio Giliberti ha scritto:

> A volte ho notato pero' che alcuni threads rimangono attivi (senza occupare
> CPU) e non rieco a capire come mai.

Usi oggetti di sincronizzazione (critical section, mutex, eventi, ecc..)?
Perché č possibile che i thread "frozen" che vedi stiano in attesa ceh uno


di essi entri in stato segnalato...

> Ho fatto un metodo nel mio thread che scrive su un file i propri dati (una

> specie di dump) per vedere se ci sono cose che non ho previsto e mi sto
> chiedendo se esiste un modo per mandare un messaggio con un sendmessage()

Immagino tu intenda PostThreadMessage(). Sě, devi avere tutti gli id e

Fabio Giliberti

unread,
Jul 22, 2008, 10:36:53 AM7/22/08
to
--
-----------------------------------
Fabio Giliberti, Agile Telecom Srl.
MSN: f.gil...@agiletelecom.com
ICQ#: 291157840
Skype: fabio.smsdriver

"Andrea Laforgia" <x...@xx.xx> ha scritto nel messaggio
news:g62ejm$nt$1...@news.newsland.it...


> Fabio Giliberti ha scritto:
>
>> A volte ho notato pero' che alcuni threads rimangono attivi (senza
>> occupare
>> CPU) e non rieco a capire come mai.
>
> Usi oggetti di sincronizzazione (critical section, mutex, eventi, ecc..)?
> Perché č possibile che i thread "frozen" che vedi stiano in attesa ceh uno
> di essi entri in stato segnalato...

No non ci sono mutex o semafori particolari che possano interrompere
l'execute del thread e ogni thread č perfettamente autonomo non accedendo a
risorse esterne di altri forms o moduli.


>
>> Ho fatto un metodo nel mio thread che scrive su un file i propri dati
>> (una
>> specie di dump) per vedere se ci sono cose che non ho previsto e mi sto
>> chiedendo se esiste un modo per mandare un messaggio con un sendmessage()
>
> Immagino tu intenda PostThreadMessage(). Sě, devi avere tutti gli id e
> mandare loro un messaggio.

Si intendo proprio quello, speravo pero' che si potesse fare un broadcast
del messaggio in modo che
venisse raccolto da tutti i thread senza dovermi tenere aggiornato l'elenco
degli id.
Faro' un TObjectList al quale aggiungero' il thread al momento della
creazione e l'extract nell'evento OnTerminate del thread.
E a questo punto tanto vale fare un ciclo su tutti i threads attivi e
chiamare direttamente il metodo che fa il dump nel file invece che il
Post...il post aveva senso se si poteva fare una specie di broadcast a
tutti.

Grazie.

Andrea Laforgia

unread,
Jul 22, 2008, 3:07:45 PM7/22/08
to
On Tue, 22 Jul 2008 14:36:53 GMT, "Fabio Giliberti"
<fa...@nuovavision.com> wrote:

>Si intendo proprio quello, speravo pero' che si potesse fare un broadcast
>del messaggio in modo che

Non puoi perché gli id dei thread sono system-wide e non legati a una
singola applicazione.

>E a questo punto tanto vale fare un ciclo su tutti i threads attivi e
>chiamare direttamente il metodo che fa il dump nel file invece che il
>Post...il post aveva senso se si poteva fare una specie di broadcast a
>tutti.

A me non piace questa tecnica. Io preferisco l'isolamento totale tra
thread primario e thread secondari (e credimi, meno fai accessi
diretti tra loro, meglio č). Sia dal thread secondario verso il thread
primario, che nel verso contrario, io uso code di messaggi. Meno si
sincronizzano tra loro, meglio č.

0 new messages