Terminé un thread

Signaler
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
-
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
-
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

Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
47
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
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
52
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
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
52
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
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
86
Salut,

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

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
52
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
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
86
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#
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
52
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
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
47
while(true), non ?

Mx
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
52
Quelle est la différence entre un while(true) et un for(;;) ????

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
47
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
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
52
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