Threads

Threads

am 11.07.2006 16:10:08 von doleman

Hallo,

Ich Implementiere ein LDAP-Browser in Perl Tk, er soll neben den
Browse-Funktionen auch eine Such Funktion beinhalten, dabei wird die
Net::LDAP Schnittstelle benutzt. Wenn jetzt eine Suchanfrage
abgeschickt wird sollte sie auch vom Benutzer abgebrochen werden
können, da sie bei falschen filter-eingaben sehr lang dauern könnte.
Deshalb sollte die Suchanfrage in einen eigenen Prozess/Thread
gestartet werden. Was gibt es in Perl für möglichkeiten?
Ich habe mal folgendes versucht:

my $thr1 =3D threads->new(
sub {
my ($basedn, $scope, $searchfilter, @attr) =3D @_;
print "Suchen...\n$basedn, $scope, $searchfilter, @attr\n";

#suchanfrage
my $list =3D $ldapconnection->search(
base =3D> $basedn,
scope =3D> $scope,
filter =3D> $searchfilter,
attrs =3D> [@attr],
)
|| die $LDAP_Error;

#seach error -> exit
if ($LDAP_Error) {
cluck("Searching error : $LDAP_Error.\n\n");
exit();

}, $basedn, $scope, $searchfilter, @attr
);

$thr1->join();


wobei bei $thr1->join eine fehlermeldung liefert. Außerdem sollte ich
die $list Variable dann wieder aus dem Thread returnen.....

danke
gruss Andrei

Re: Threads

am 25.07.2006 08:18:58 von Slaven Rezic

"doleman" writes:

> Hallo,
>
> Ich Implementiere ein LDAP-Browser in Perl Tk, er soll neben den
> Browse-Funktionen auch eine Such Funktion beinhalten, dabei wird die
> Net::LDAP Schnittstelle benutzt. Wenn jetzt eine Suchanfrage
> abgeschickt wird sollte sie auch vom Benutzer abgebrochen werden
> können, da sie bei falschen filter-eingaben sehr lang dauern könnte.
> Deshalb sollte die Suchanfrage in einen eigenen Prozess/Thread
> gestartet werden. Was gibt es in Perl für möglichkeiten?
> Ich habe mal folgendes versucht:
>
[...]
>
> wobei bei $thr1->join eine fehlermeldung liefert. Außerdem sollte ich
> die $list Variable dann wieder aus dem Thread returnen.....
>

Was für eine Fehlermeldung?

Die Kombination Threads und Perl/Tk funktioniert nicht so gut. Tk ist
nicht thread-sicher, so dass man sicherstellen muss, dass nur genau
*ein* Thread auf die Tk-Interna zugreift.

Eine weitere Möglichkeit der parallelen Programmierung wäre fork +
Tk::fileevent. Oder du schaust mal in POE rein.

Gruß,
Slaven

--
Slaven Rezic - slaven rezic de

tkrevdiff - graphical display of diffs between revisions (RCS, CVS or SVN)
http://ptktools.sourceforge.net/#tkrevdiff