Schrift
[thread]6957[/thread]

threads und detach



<< >> 10 Einträge, 1 Seite
Gast Gast
 2005-05-04 03:06
#54547 #54547
hi,
Ich benutze einen Thread in dem eine Enddlosscheife läuft. Um den Thread zu beenden führe ich detach aus. Jedes mal wenn detach ausgeführt wird, schreibt mir das Thread-Modul ein "A thread exited while ... other threads were still running", auf die Console.
Das ist zwar nicht besonders schlimm, nervt aber fürchterlich.
Wie kann ich also diese Meldung abfangen? Bzw. Wenn es sich dabei um eine Exception handelt (was es vermutlich nicht ist), wie kann man in Perl Exceptions abfangen?

danke
pktm
 2005-05-04 11:19
#54548 #54548
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Mit eval?
http://www.intergastro-service.de (mein erstes CMS :) )
Strat
 2005-05-04 17:24
#54549 #54549
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
warum beendest du ihn mit detach? sobald dann der hauptthread beendet wird, kommt diese warnung. kannst du ihn nicht irgendwie mit join beenden?
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
robert
 2005-05-04 22:31
#54550 #54550
User since
2005-05-04
3 Artikel
BenutzerIn
[default_avatar]
hallo pktm, hallo strat

eval klickt gut, hat zwar jetzt auf die schnelle nicht geklappt, werds mir aber nochmal genauer anschauen.

@strat: der thread lässt sich nicht min join beenden weil eine endlosschleife in ihm läuft. join wartet auf die beendigung des threads.
Crian
 2005-05-05 03:09
#54551 #54551
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Kannst Du nicht mit last rausspringen?
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
esskar
 2005-05-05 03:53
#54552 #54552
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
join: wartet auf den Thread bis er sich beendet hat
detach: beendet den thread doch auch nicht, sondern sorgt dafür, dass sich das Hauptpogramm nicht mehr darum kümmert, oder?
robert
 2005-05-05 14:54
#54553 #54553
User since
2005-05-04
3 Artikel
BenutzerIn
[default_avatar]
Du hast recht. Aber ich denke der Thread wird trotzdem unterbrochen wenn das Hauptprogramm abbricht. Ich glaube nicht das der Thread ewig läuft.

Die Schleife laesst sich nicht mit last abbrechen, da es sich um eine Client-Anwendung handelt, die innerhalb der Schleife eine recv funktion ausführt. An der bleibt er stehen und wartet auf eine Nachricht des Servers ohne das ich noch irgendetwas kontrollieren koennte.

eval klappt nicht.
esskar
 2005-05-05 15:56
#54554 #54554
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=robert,05.05.2005, 12:54]die innerhalb der Schleife eine  recv funktion ausführt. An der bleibt er stehen und wartet auf eine Nachricht des Servers ohne das ich noch irgendetwas kontrollieren koennte.[/quote]
doch...
wenn du mit IO::Select arbeitest, kannst du kontrollieren, ob der server dir wirklich was schicken will, oder nicht.
robert
 2005-05-05 19:57
#54555 #54555
User since
2005-05-04
3 Artikel
BenutzerIn
[default_avatar]
Das Protokoll das ich benutze ist so spezifiziert das sich festellen lässt wieviele bytes an Daten geschickt werden bis die nachricht vollständig ist. Das wurde eingeführt damit ich auf selects verzichten kann und die Geschwindigkeit der Übertragung nicht durch timeouts gemindert wird.
Letztlich sehe ich aber keine andere Möglichkeit als Select zu benutzen und den timeout auf eine sehr niedrige Zahl zu stellen. Hoffentlich ohne das die Prozessorlast zu hoch wird.
Strat
 2005-05-09 20:20
#54556 #54556
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
vielleicht eine shared variable als semaphor benuetzen und im hauptthread ein join abfeuern, und im "kindthread" diese variable ueberpruefen und dort dann die schleife beenden?
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< >> 10 Einträge, 1 Seite



View all threads created 2005-05-04 03:06.