P
prameela.vankineni
Hi,
Iam trying to transfer files(Io:Ftp)using threads in perl can any
one suggest me how to stop threads if i pressed cancelTransfer
button.Here iam giving part of my code.
sub get_value
{
print "Monitoring...\n";
while(1)
{
next unless (defined($list));
#sleep(2);
my $iter = $list->get_iter_first;
my $filename = $list->get($iter, 0) if defined($iter);
next unless(defined($filename));
print "File is $filename\n";
print "Splitting file...\n";
my $filenames_ref = split_file($filename);
my @filenames = @$filenames_ref;
$count = 0;
$finished = 0;
foreach (@filenames)
{
print "Transferring $_ ...\n";
transfer_file_cb($_,$count);
$count++;
}
sleep(2);
$list->remove($iter) if defined($iter);
}
}
sub transfer_file_cb
{
my $thread = new threads(\&transfer_file,\@_);
push (@threads, $thread);
}
# wait for the children to finish...
foreach (@threads)
{
$_->join;
}
sub transfer_file
{
my $arrayref = shift;
my $filename = @$arrayref[0];
my $count = @$arrayref[1];
print "FILE IS : $filename\n";
my $file_size = -s $filename;
$org_file;
#Taking only filename from the path
if($filename =~ /([A-Za-z0-9_-]*\.mpg)$/)
{
$org_file = $1;
}
open(FD,"$filename") or die "cannot open file: $!";
binmode(FD);
my $completed;
my
$ftp=IO::Ftp->new(">","//user:usr1234\@callista.ueltv.org/quick/$org_file",TYPE=>'i');
my $n;
while($n = read(FD,$buffer,4*1024*1024))
{
$ftp->send($buffer);
$completed += $n;
$finished += $n;
# % xferred
my $percent = $completed / $file_size;
$progressbar[$count]->set_fraction($percent);
my $totalpercent = $finished / $totalfilesize;
print "Total is $totalpercent\n";
print "F is $finished\n";
$progressbar6->set_fraction($totalpercent);
undef($buffer);
}
if($finished == $totalfilesize)
{
$finished = 0;
$progressbar[0]->set_fraction('');
$progressbar[1]->set_fraction('');
$progressbar[2]->set_fraction('');
$progressbar[3]->set_fraction('');
$progressbar[4]->set_fraction('');
$progressbar6->set_fraction('');
}
close(FD);
# Deleting temporary files from the Directory
unlink($filename);
}
Iam trying to transfer files(Io:Ftp)using threads in perl can any
one suggest me how to stop threads if i pressed cancelTransfer
button.Here iam giving part of my code.
sub get_value
{
print "Monitoring...\n";
while(1)
{
next unless (defined($list));
#sleep(2);
my $iter = $list->get_iter_first;
my $filename = $list->get($iter, 0) if defined($iter);
next unless(defined($filename));
print "File is $filename\n";
print "Splitting file...\n";
my $filenames_ref = split_file($filename);
my @filenames = @$filenames_ref;
$count = 0;
$finished = 0;
foreach (@filenames)
{
print "Transferring $_ ...\n";
transfer_file_cb($_,$count);
$count++;
}
sleep(2);
$list->remove($iter) if defined($iter);
}
}
sub transfer_file_cb
{
my $thread = new threads(\&transfer_file,\@_);
push (@threads, $thread);
}
# wait for the children to finish...
foreach (@threads)
{
$_->join;
}
sub transfer_file
{
my $arrayref = shift;
my $filename = @$arrayref[0];
my $count = @$arrayref[1];
print "FILE IS : $filename\n";
my $file_size = -s $filename;
$org_file;
#Taking only filename from the path
if($filename =~ /([A-Za-z0-9_-]*\.mpg)$/)
{
$org_file = $1;
}
open(FD,"$filename") or die "cannot open file: $!";
binmode(FD);
my $completed;
my
$ftp=IO::Ftp->new(">","//user:usr1234\@callista.ueltv.org/quick/$org_file",TYPE=>'i');
my $n;
while($n = read(FD,$buffer,4*1024*1024))
{
$ftp->send($buffer);
$completed += $n;
$finished += $n;
# % xferred
my $percent = $completed / $file_size;
$progressbar[$count]->set_fraction($percent);
my $totalpercent = $finished / $totalfilesize;
print "Total is $totalpercent\n";
print "F is $finished\n";
$progressbar6->set_fraction($totalpercent);
undef($buffer);
}
if($finished == $totalfilesize)
{
$finished = 0;
$progressbar[0]->set_fraction('');
$progressbar[1]->set_fraction('');
$progressbar[2]->set_fraction('');
$progressbar[3]->set_fraction('');
$progressbar[4]->set_fraction('');
$progressbar6->set_fraction('');
}
close(FD);
# Deleting temporary files from the Directory
unlink($filename);
}