Terminé un thread

cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 - 21 avril 2005 à 15:31
cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 - 22 avril 2005 à 12:42
Bonjour, petite question aux spécialistes des Threads.
J'ai fait, juste pour essayer, un server avec des clients qui s'y connecte. Le client qui se connecte envoie le nom d'un file au server, puis le serveur va transmettre le fichier au client de manière asynchrone...
Le problème c'est que le serveur écoute un port, et la méthode qui s'occupe de ça tourne dans un thread que j'ai démarré. Or, quand je quitter le server, je n'arrive pas à terminer ce thread proprement (dans le task manager, je vois un process qui tourne).
J'ai pourtant fait un _myThread.Abort(), mais rien n'y fait (si je fais _myThread.IsAlive juste après, je reçois toujours 'true)'.

Hum, je ne sais pas si tout est très clair. Si besoin est, je posterai un morceau de code...
Merci d'avance aux réponses!

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever

11 réponses

MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
21 avril 2005 à 15:57
Pas d'exception levée avec l'appel du Abort() ?

Et si tu ajoute myThread = null ?



Normalement y'a rien d'autre a faire qu'un Abort() pour terminer un Thread, donc oui, y'a bien un souci quelque part ^^



Et je veux bien un morceau de code ;)

Mx
0
cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
21 avril 2005 à 16:20
Merci de la réponse (j'étais sur que ce serait toi qui répondrait )

Aucune exception n'est levée !
Je n'ai malheureusement pas le code sur le poste depuis lequel j'écris ce message, je posterai donc un morceau d'ici demain...
Ce que je sais, c'est que je ne fais pas de _myThread = null; mais je ne vois pas tellement à quoi ça servirait (à part éventuellement à indiquer au garbage collector qu'il peut faire son travail).

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
0
cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
22 avril 2005 à 11:31
Alors voici un peu de code :
Sur le clique d'un bouton, je lance un nouveau Thread comme ceci (l'event click de ce bouton ne possède que ces deux lignes de codes) :


_t =
new Thread(
new ThreadStart(Start));
_t.Start();

Voici la méthode Start :



private
void Start()
{
AsynchNetworkFileServer app =
new AsynchNetworkFileServer();
app.WriteInfo +=
new NetworkFileServer.AsynchNetworkFileServer.WriteInfoEventHandler(app_WriteInfo);
app.TransfereEnded +=
new NetworkFileServer.AsynchNetworkFileServer.TransfereEndedEventHandler(app_TransfereEnded);

app.Run();
}

Et ensuite quand le transfère est fini, je fais dans l'event (TransfereEndedEventHandler)qui m'indique que c'est la fin :


_t.Abort();
//_t =
null;



Mais voila, le thread ne s'arrête pas.
Aucune erreur ne m'est retournée en plus, une idée ?

[Pub]
http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
22 avril 2005 à 11:37
Salut,

La méthode AsynchNetworkFileServer.Run est similaire à celle ci : Application.Run ?

Cocoricoooooooo !!!!
coq
MVP Visual C#
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
22 avril 2005 à 11:58
Non, voici le code de cette méthode :

public
void Run()
{

TcpListener tcpListener =
new TcpListener(65000);
tcpListener.Start();



for(;;)
{

Socket socketForClient = tcpListener.AcceptSocket();

if(socketForClient.Connected)
{

if(WriteInfo !=
null) WriteInfo("Client connected");
ClientHandler handler =
new ClientHandler(socketForClient);
handler.StartRead();
handler.WriteInfo +=
new NetworkFileServer.ClientHandler.WriteInfoEventHandler(handler_WriteInfo);
handler.TransfereEnded +=
new NetworkFileServer.ClientHandler.TransfereEndedEventHandler(handler_TransfereEnded);
}
}
}

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
22 avril 2005 à 12:10
for(;;)

=> déjà ce truc là ne me dit rien de bon lol
Tu dois en consommer du temps processeur durant ton transfert lol

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
22 avril 2005 à 12:25
Ben comment faire autrement? Je dois écouter continuellement pour savoir si y'a un client qui se connecte (il peut y en avoir plusieurs!). Non ?
Et est-ce que c'est lié à mon problème de thread que je ne peux pas fermer?

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
22 avril 2005 à 12:31
while(true), non ?

Mx
0
cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
22 avril 2005 à 12:36
Quelle est la différence entre un while(true) et un for(;;) ????

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
22 avril 2005 à 12:39
C'est pas les memes lettres...

En gros, jsais pas

Bon enfin si, ca fait plus propre.



Au niveau de ton thread, tu asspécifié des propriétés autres que celles par défaut ?

Priorité, IsBackground, ... ?




Mx
0
cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
22 avril 2005 à 12:42
Lol
Selon moi, y'a pas de différence entre les deux !

Pour le thread, j'ai absolument rien spécifié d'autre...
Des idées?

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
0
Rejoignez-nous