1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
sub worker {
while(1){
if(($ftp_status eq "aktiv") || ($log_status eq "aktiv")){
my @thrs;
foreach my $object (@Liste){
#Überprüfe, ob die letzte Durchführng abgeschlossen ist
if(!$arr_ablauf[$object->getID()]){
$arr_ablauf[$object->getID()] =1;
push @thrs, threads->create(\&ablauf, $object);
}
}
$_ -> join for @thrs;
print "joined\n";
}
sleep 10;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
sub ablauf{
#Object ist ein Klassenobjekt und enthält alle Eigentschaften
my $object = shift;
#Überprüfe, ob neue Daten über die FTP-Verbindung geladen werden sollen
if($ftp_status eq "aktiv"){
logging("neue Thread fuer " . $object->getName() . " gestartet.", "ftp-sync");
#Starte den FTP-Vorgang
transfer($object);
}
#Überprüfe, ob die Daten weiterverarbeitet werden sollen
if($log_status eq "aktiv"){
logging("Changer fuer " . $object->getName() . " gestartet.", "Changer");
#Starte Weiterverarbeitung
changer($object);
}
#Setze Variable , das die Durchführung abgeschlossen ist
$arr_ablauf[$object->getID()]=0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/usr/Bin/perl -w
use strict;
use warnings;
use Threads;
my $thread = threads->create( \&test );
$thread->detach;
use Tk;
# Create the window
my $main = new MainWindow;
my $label2 = $main->Label(
-pady => '1', -relief => 'flat',
-padx => '1', -state => 'normal', -justify => 'center',
-font => [-family => 'Arial',-size => 14, -weight => 'bold',],
-text => 'Status',
)->place( -x => 125, -y => 25);
MainLoop;
sub test{
my @thrs;
for (1..10){
#print "$_\n";
push @thrs, threads->create(\&inside, $_);
}
$_ -> join for @thrs;
print "done2\n";
}
sub inside{
my $i = shift;
my $j = rand(10);
#print "Thread $i..... $j\n";
sleep($j);
#print "Thread $i ready\n";
}