freeze
23.08.2006, 14:28
Hello @all,
Ich möchte beispielsweise mittels 10 Threads in eine Datei bzw. 10 Dateien schreiben. Hier habe ich das Problem das dies nicht mit Threads funktioniert.
for(my $k = 1; $k < $def_max_threads; $k++) {
my $char = undef;
$char = chr(rand(256)+0) if(defined $use_random_char);
$char = $use_char if(defined $use_char);
$thread_count++;
my $thr = threads->new(
sub{
DoJob($filename,
$char,
($max_bytes/$def_max_threads,
$k,
\$j
)
)
}
);
if($k == $def_max_threads) {
my $thr->join;
}
else {
if(defined $detach) { print "Joining Thread\n"; $thr->join; }
elsif(not defined $detach) { print "Thread were detached\n"; $thr->detach; }
}
}
sub DoJob {
# Write data to file
my $fn = shift;
my $char = shift;
my $max_count = shift;
my $info = shift;
my $jj = shift;
$filename .= $fn . "_" . $info;
open my $fh, ">$filename" or last;
print "T$info: Create file\n";
print "T$info: I'am doing a job for Thread $info\n";
print "T$info: I have to write $max_count bytes\n";
for(my $i = 0; $i < $max_count; $i++) {
print " => T$info: Write to file\n";
print $fh, $char;
}
print "T$info: Job for Thread #$info finished\n";
close $fh;
$j++;
$jj++;
$thread_count--;
}
Kann mir diesbezüglich jemand helfen?
Vielen Dank im Voraus
Lg _freeze_
Ich möchte beispielsweise mittels 10 Threads in eine Datei bzw. 10 Dateien schreiben. Hier habe ich das Problem das dies nicht mit Threads funktioniert.
for(my $k = 1; $k < $def_max_threads; $k++) {
my $char = undef;
$char = chr(rand(256)+0) if(defined $use_random_char);
$char = $use_char if(defined $use_char);
$thread_count++;
my $thr = threads->new(
sub{
DoJob($filename,
$char,
($max_bytes/$def_max_threads,
$k,
\$j
)
)
}
);
if($k == $def_max_threads) {
my $thr->join;
}
else {
if(defined $detach) { print "Joining Thread\n"; $thr->join; }
elsif(not defined $detach) { print "Thread were detached\n"; $thr->detach; }
}
}
sub DoJob {
# Write data to file
my $fn = shift;
my $char = shift;
my $max_count = shift;
my $info = shift;
my $jj = shift;
$filename .= $fn . "_" . $info;
open my $fh, ">$filename" or last;
print "T$info: Create file\n";
print "T$info: I'am doing a job for Thread $info\n";
print "T$info: I have to write $max_count bytes\n";
for(my $i = 0; $i < $max_count; $i++) {
print " => T$info: Write to file\n";
print $fh, $char;
}
print "T$info: Job for Thread #$info finished\n";
close $fh;
$j++;
$jj++;
$thread_count--;
}
Kann mir diesbezüglich jemand helfen?
Vielen Dank im Voraus
Lg _freeze_