Leser: 1
|< 1 2 >| | 17 Einträge, 2 Seiten |
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/perl
use strict;
use warnings 'all';
use Tk;
use threads;
my $thr = threads->new(sub { (print("An!\n"), sleep 1) while 1 });
my $mw = tkinit;
$mw->Button(-text => "Start", -command => sub { threads->yield; $thr->join })->pack;
$mw->Button(-text => "Stop!", -command => sub { $thr->detach })->pack;
MainLoop;
QuoteAls 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
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 $@;
QuoteUnd es soll ja nicht nach einer bestimmten Zeit stoppen, sondern bei einem bestimmten Ereignis.
QuoteDie obere Methode sollte mit einer ActiveState Version 5.8 oder so Funktionieren. Ansonsten wurde fork() auf Windows Portiert.ieder muss das ganze auch auf Windows laufen
1
2
3
4
5
6
7
8
eval
{
# hier kann es jetzt hängen bleiben:
eval("Inhalt vom Textfeld");
# Fehlermeldungen ausgeben
errorMsg($@) if $@;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
use strict;
use warnings;
sub child {
$SIG{TERM} = sub { exit 0 };
for ( 1 .. 10 ) {
print "Child: $_\n";
sleep 1;
}
exit 0;
}
die "Cannot fork: $!\n"
unless defined( my $pid = fork );
$pid || child;
for ( 1 .. 10 ) {
print "Parent: $_\n";
kill 15 => $pid if $_ == 5;
sleep 1;
}
QuoteDein zweites Beispiel mit fork() funktioniert, allerdings weiß ich nicht wie mir das helfen soll eval zu stoppen sobald ein entsprechendes Ereignis auftritt?
|< 1 2 >| | 17 Einträge, 2 Seiten |