Avatar billede simon.ulsnes Nybegynder
10. oktober 2002 - 16:32 Der er 1 løsning

Threads

Hej eksperter,
Jeg arbejder i øjeblikket på et lille program, som kan chatte med sig selv, forstået på den måde at det kan sende en besked til en IP-adresse, og hvis der er en kopi af programmet som lytter, kan det vise beskeden der blev sendt.

Mit problem er som følger: Jeg bruger TcpClient og TcpListener fra System.Net.Sockets til at kommunikere med. Jeg har puttet listeneren i en thread for sig selv, så den ikke forstyrrer brugeren. (normalt stoppes hele programmet når TcpListener.AcceptTcpClient() kaldes)

Nu er mit problem, at når jeg afslutter mit program, bliver min ekstra thread ikke afsluttet. Jeg har selvfølgelig prøvet med thread.Abor(), thread.Interrupt() og thread.Suspend(), men ingen af disse virker.

Faktisk kan jeg i Joblisten se at der rent faktisk bliver startet en helt ny thread når jeg afslutter mit program. Hvorfor?

// Simon
// This sentence no verb.
Avatar billede reffak Nybegynder
12. oktober 2002 - 14:33 #1
De teknikker du bruger til at stoppe tråden, vil først have effekt næste gang tråden laver et blocking call. Dette kunne f.eks. ske ved at kalde Thread.Sleep(x) i din listener thread. Men mere generelt:

Det sikreste du kan gøre for at stoppe en tråd, er ved at sikre, at den kan stoppe sig selv. Det lyder simpelt, men jeg tror det vil løse dit problem:
Opret en bool variabel Shutdown, som er synlig for både dit program og din listener thread. Når dit program lukker ned, sættes Shutdown = true. Sørg for at din listener thread checker værdien af Shutdown fra tid til anden. Når den er sand, skal tråden afslutte sig selv.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester