Thread eval stoppen (16 answers)
Opened by Gast at 2006-11-29 17:33

sid burn
 2006-11-29 18:37
#72070 #72070
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Quote
Als ich das ausprobiert habe ist mir nur aufgefallen, dass join() wohl den thread nicht startet, sondern ihm die volle "Aufmerksamkeit" gibt. Und, dass detach() den thread nicht beendet, sondern in quasi löscht

join() ist dafür da um den Rückgabewert eines Threads auszulesen. Wenn der Thread noch nicht beendet wurde, bockiert join solange bis ein Rückgabewert vorhanden ist.

Mit detach() sagst du das der Rückgabewert letztendlich Verworfen werden soll wenn der Thread fertig ist. Daher du sparst dir das Manuelle aufrufen von join(). Kannst dann aber auch nicht mehr den Rückgabewert auslesen.

Der Thread selber läuft schon nachdem du "threads->new()" aufgerufen hast.


Ansonsten fällt mir zur Zeit nur eine Möglichkeit mit SIGALRM ein um einen Codeabschnitt nach einer bestimmten Zeit abbrechen zu lassen.

Das Codeschnipel hier unten gibt einen 5 Sekunden Zeit für eine Eingabe und bricht nach der Zeit ab.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl
use warnings;
use strict;

alarm(5);
eval {
$SIG{ALRM} = sub { die "timeout" };
print "Name eingeben: ";
my $input = <STDIN>;
alarm(0);
};
alarm(0);
die "Die Zeit ist abgelaufen...\n" if $@ =~ m/timeout/;
die "Error: $@\n" if $@;


Das ganze kannst du sicherlich auch mit fork() koppeln. Wie gut das alles mit threads funktioniert weiß ich nicht.

Und wie gut das ganze auch noch innerhlab einer GUI läuft kann ich noch weniger sagen.\n\n

<!--EDIT|sid burn|1164819151-->
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de

View full thread eval stoppen