Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Uccidere processi figli
mercoledì 12 maggio 2004 - 18.56
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
19018
Profilo
| Expert
502
messaggi | Data Invio:
mer 12 mag 2004 - 18:56
Ho scritto due applicazioni una che funge da client ed una da server...il problema è questo...il server è sempre in ascolto e quando riceve una richiesta di connessione, se questa viene accettata, per ogni client che si connette il server fa partire un lettura dello stream asincrona con il metodo stream.beginRead e quindi chiama un'altra funzione che gestisce tutta la lettura dati e restituisce alla chiamata asincrona un valore di ritorno per indicare che la lettura è finita poi richiama stream.beginRead per altre eventuali comunicazione da parte del server...quando però chiudo il server tutti i processi figli che vengono generati per ogni client dalla chiamata asincrona rimangono attivi...come li uccido???grazieee
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
mer 12 mag 2004 - 22:15
Non so come fai a gestire il tutto crei dei nuovi Thread ? O gestisci i Socket con un array ?
In genere quando fai uno shutdown del server/programma dovresti chiuderlo in maniera "gracefully" come si dice in gergo cioè pulendo tutte le risorse usate, finestre, sockets, threads, ecc.
Se usi Threads bisogna chiuderli facendoli terminare o con il metodo Abort() se non ricordo male.
ciao
david
19018
Profilo
| Expert
502
messaggi | Data Invio:
gio 13 mag 2004 - 01:04
lasciando perdere il fatto che + client si possono connettere al server ,ti spiego cosa accade quando un solo client si connette al server...allora il server è implementato con la classe TCPListener ed è in ascolto grazie al metodo AcceptTcpClient dopo viene creato lo stream comunicare col client infine c'è una funzione fatta da me che fa si che il server di continuo ascolti quel client , essenzialmente questa funzione non è altro che questa riga di codice :
_Stream.BeginRead(_InBuffer, 0, _InBuffer.Length, AddressOf DataReceived, Nothing)
è un metodo asincrono che permette al server di aspettare che il client gli invii dati e solo quando quando ciò avviene allora viene chiamata la funzione DataReceived il cui codice è questo :
Private Sub DataReceived(ByVal ar As IAsyncResult)
Dim ris As Integer
ris = _Stream.EndRead(ar)
If ris = 0 Then
EchoData("Client disconnected...")
_Stream.Close() 'chiudi lo questo stream
_Stream = Nothing
_Client.Close() 'chiudi questo tcpclient
_Client = Nothing
Else
_InBufferMsg = System.Text.Encoding.ASCII.GetString(_InBuffer)
ListBox1.Items.Add(Date.Now & " >> Client send ---> " & _InBufferMsg)
StartRead()
End If
end sub
ora il problema è questo...ogni volta che il client si connette parte questa funzione asincrona che da vita ad un processo indipendente da quello padre e che vive per i fatti suoi appunto perchè alla fine è una callback quiandi quando devo chiudere la form del server questo cavolo di processo rimane in vita e si evince dal taskmanager....COME FACCIO PER FARLO CESSARE QUANDO VOGLIO IO???
ciccio.unico
Profilo
| Newbie
1
messaggi | Data Invio:
lun 6 mar 2006 - 17:53
Non so se ti può aiutare ma dà un'occhaita qui:
http://msdn.microsoft.com/library/ita/default.asp?url=/library/ITA/cpguide/html/cpconASynchronousFileIO.asp
ciccio.unico@libero.it
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !