03. februar 2003 - 23:47Der er
32 kommentarer og 1 løsning
En tråd der ikke vil nedlægges...
Nu kører mine tråde, dog vil de ikke stoppe igen;) Jeg har en tråd der bliver startet med en run() i min constructor på en form. run(): her er min run. listenThread = new Thread( new ThreadStart( startListening ) ); listenThread.Start();
i startListening laver jeg så noget arbejde. Men hvordan nedlægger jeg den igen?? har prøvet abort, men jeg får ikke en exception som ventet på nedlukningen nogle hints??
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
websmith>> det er kun fordi at jeg kalder thrClock.Abort(); at threads'ene bliver afsluttet...
hvis jeg fra en anden form kalder Application.Exit(), så lukker programmet, men bliver ved med at figurere som process i taskmanageren, fordi at der stadigvæk kører en thread.
nemlig jeg kan også se det i taskmanager. Men jeg vil lige forsøge mig lidt mere. Jeg har min tråd hvor inde i at der kører en TcpListener, denne tror jeg skaber mit problem
okay nu har jeg prøvet med stop på min tcp listener, men så får jeg en exception:
Unhandled Exception: System.Net.Sockets.SocketException: En blokeringshandling blev afbrudt af et kald til WSACancelBlockingCall at System.Net.Sockets.Socket.Accept() at System.Net.Sockets.TcpListener.AcceptSocket() at SharpClient.ClientServ.runListen() in c:\........\clientserv.cs: line 93
her er min linie 93:
Socket newClient = tcpListener.AcceptSocket(); og der er endnu ingen klienter der er forbundet, hvordan dælen kan jeg så få en dejl ved at lukke min listener??
ahhh nu kører det vist. Jeg tror jeg fik lukket min applikation for hurtigt (Exit) så ikke alt blev frigivet ;) Er der forresten nogen af jer der har problemer med debuggeren i VS.NET?? min låser visual studio, hvis jeg laver run med debugger. Også hvis jeg vælger noger omkring debuggeren låser vs.net
er ikke helt med på hvad du mener, når du siger at den fryser når du laver run... men hos mig virker det nu upåklageligt... eneste jeg har lidt svært ved at få til at køre ordenligt er når jeg skal debugge asp.net sider, men det overlever jeg nok.
naxosnaxos >> Det er en del nemmere at anvende ThreadPool.QueueUserWorkItem(new WaitCallback(thread), etobjekt); til multithreading, omend man har knap så meget kontrol over den enkelte tråd. Så kan trådene bedre selv styre hvornår de lukker sig og sådan. Min TcpListener som cyberfessor omtaler bruger dette til at kunne modtage mange klienter på samme tid - hvis du har lyst, kan jeg sende dig koden så du kan kigge lidt på den...
tak for mailen den vil jeg kigge på snart ;o). Først vil jeg have lukket min egen TcpListener. den vil bare lave en exception, når jeg laver en stop på den.
Og dne vil stadig ikke stoppes ;o) den klager stasig som tidligere skrevet over at en blokerings handling blev afbrudt. Så jeg går ud fra at den kører som blocking. men hvordan dælen afbryder man den ellers??
hmm hmmm hmmmmmm aghh hjf89q32 nu er det for underligt. JEg har ændret min while, så den arbejder på true/false. Men selv om jeg ændrer den til false, så wile lækken brudes, kommer den ikke rigtig ud. tcpListener processen kører stadig. og hvis jeg nu laver en stop på den laver den blot en exception. Er der ikke en der kan prøve at teste det og se om der er samme fejl??
jeg har så lige erfaret at hvis jeg sætter min while variable til false, stoper den som skrevet ikke tcplistener, men hvis jeg derefter connecter med en client, lukker denne ryger jeg ud af løkken og listeneren bliver nedlagt. Det er som om den vil have mindst en connection før dens blokerings tilstand kan brydes
naxosnaxos>> lyder weird, men mon ikke der er en "naturlig" forklaring på det, hvis man begynder at grave i dokumentationen ;) godt at du endelig fik det til at virke :)
Jeg sidder med præcis det samme problem. Jeg lytter efter en besked på netværket i en while-løkke på præcis samme måde, og den nedlægges heller ikke.
Grunden er at tråden jo først nedlægges når arbejdet i løkken er gjort færdigt. At man sætter while-variablen til false får den ikke til at hoppe ud løkken, men gør blot at den ikke starter forfra på løkken næste gang. Men der er ikke nogen næste gang, hvis man ikke modtager noget.
At sætte while(false) virker altså ikke, når det inde i løkken er en metode der blokerer.
time to close mit spg. fik jeg vist svar på, men der er ingen at give point, så først til mølle....
Synes godt om
Ny brugerNybegynder
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.