perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 21
Click for quality!




12.02.2012 / 02:03

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragBUG in Thread::Queue ???
Seitenanfang
Mit nachfolgendem Perl-Script (DLL) bekommt eine Listbox in einem GUI ständig Meldungen über den Programm-Status des Perl-Scripts. Solange nur 1 bis 3 oder 5 Zeilen in der Listbox vorhanden sind, läuft das Script einwandfrei. Je mehr Zeilen vorhanden sind, desto größer ist die Wahrscheinlichkeit, das sich die GUI aufhängt. Beim Austesten des Fehlers, bin ich darauf gestoßen, dass Perl in diesen Zeilen [blue]$return_name = $queueName->dequeue() if ( $queueName->pending() > 0 )[/blue] dann kein dequeue mehr hat.

Hier der Quelltext:


package fdaautopnsi;

use strict;
use Cwd;
use Term::ReadLine;
use File::DosGlob 'glob';
my @flist = glob "*.*";
use Crypt::SSLeay;
use LWP::UserAgent;
use HTTP::Cookies;
use HTTP::Request::Common qw(GET);
use URI::URL;
use threads;
use Thread::Queue;

###### Global Variables ##########
my $program_directory;
my $m_username;
my $m_password;
my $temp_dir;
my $starter;
my $initializer;
my $queueReal2P;
my $queueName;
my $queueConnect;
my $queueEntryNr;
my $queuePN;

sub initialize {
$program_directory = cwd;
my @param = @_;
$m_username = $param[0];
$m_password = $param[1];
$temp_dir = $param[2];

$queueName = Thread::Queue->new();
$queueConnect = Thread::Queue->new();
$queueEntryNr = Thread::Queue->new();
$queuePN = Thread::Queue->new();
}

sub start {
$starter = threads->create("mainthread");
}

sub return_name_status {
my $return_name = "nothing new";
$return_name = $queueName->dequeue() if ( $queueName->pending() > 0 );
return $return_name;
}

sub return_connect_status {
my $return_connect = "nothing new";
$return_connect = $queueConnect->dequeue() if ( $queueConnect->pending() > 0 );
return $return_connect;
}

sub return_entrynr_status {
my $return_entrynr = "nothing new";
$return_entrynr = $queueEntryNr->dequeue() if ( $queueEntryNr->pending() > 0 );
return $return_entrynr;
}

sub return_pn_status {
my $return_pn = "nothing new";
$return_pn = $queuePN->dequeue() if ( $queuePN->pending() > 0 );
return $return_pn;
}

sub mainthread {
.....
....
$queueConnect->enqueue("Daten einlesen");
....
...
my ( $pn_RecName ) = $lines =~ /RecName=([^\x0D]+)/is;

$queueName->enqueue($pn_RecName);
........
...
}

Datum: 18.07.2005-17:30

-






-
-