Hello,
Alors mon message est un peu long, désolé.
j'ai commence le C# et j'ai beaucoup codé en java avant alors je voudrais savoir quelque chose que je faisais souvent en java avant : mettre un timeout sur un listener de socket (ie, il écoute jusqu'au timeout et ensuite s'arrête)
Je m'explique, voila ce que je faisais en pseudo code
[Thread d'écoute]
[Thread principal]
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 while (listener.isListening) { Lock (Verrou) { listener.getResponse(); //appel bloquant jusqu'au TimeOut traitement de la réponse; } }
Je fais ça pour arrêter correctement le thread d'écoute.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Lock(Verrou) listener.isListening = false;
maintenant un peu de C# pour vous montrer mon code actuel que je trouve moche. Je catch une exception quand le thread s'arrète.
et dans le thread principale, quand je ferme mon application
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 /// <summary> /// Listen the port, in a thread in fact /// </summary> private void Listen() { try { while (_listener.IsListening) { HttpListenerContext ctx; ctx = _listener.GetContext(); // appel bloquant Thread thr = new Thread(ProcessRequest, 0); thr.Priority = ThreadPriority.Highest; thr.Start(ctx); } } catch (Exception ex) { // ya une erreur, le thread s'arrète } }
Bon ok c'est un peu long et c'est de la pinaille, mais on est vendredi aprem, c'est aujourd'hui où jamais pour améliorer mon code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 /// <summary> /// stop the service, close the listener /// </summary> public void Stop(){ try { _listener.Stop(); } catch (Exception ex) { // erreur } }![]()
Partager