PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Perl, Threads und die Varibalen in Threads



malburg
04-02-2006, 21:18
Hi,

ich möchte einen JabberClient und einen XML RPC Service innerhalb eines Scriptes machen.

da ich beides nur mit threads (forks will ich nicht) machen konnte - hab ich das gemacht und es funktioniert auch.

jetzt hab ich aber das problem, das ich für jeden service einen thread aufmache.

und nun möchte ich, das wenn jmd. bestimme sachen über die xml rpc schickt, das ich dann in jabber eine nachricht bekomme.

meine frage nun.

wie kann ich auf die variablen in einem thread zugreifen ?

ich hab es schon mit shm (shared memory) probier, klappt aber nicht.

ich muss nur an da object aus dem thread 1 kommen und dort die function send() aufrufen können.

vielen dank.

marcel

baumgartner
06-02-2006, 08:21
Hallo,

das was du da machen willst trägt den schönen Namen Interprozessskommunikation. Dies kann man auf verschiedene Arten erledigen :)

http://www.google.at/search?hl=de&hs=J10&client=firefox-a&rls=org.mozilla:de-DE:official_s&q=interprozesskommunikation&spell=1
bietet sicher genügend brauchbare ergebnisse.

ich denke dass im openbook unixprogrammierung von www.pronix.de genügend brauchbare hinweise stehen, habe es allerdings noch nicht selbst gelesen.
http://www.pronix.de/pronix-23.html

mfg martin

malburg
06-02-2006, 14:01
ich hab mal einen code vorbereitet um zu demonstieren, was ich genau will.

ich will jetzt von einem anderen thread aus auf die methode "foo" von $t zureifen.



#!/bin/perl -w
use strict;
use threads qw/yield/;
use Data::Dumper;

package Foo;

sub new {
my($class) = @_;
bless {}, $class;
}

sub foo {
print "foo!\n";
}

package main;

my $t;

sub th1 {
$t = Foo->new();
}

sub th2 {
print $t->foo();
}

#use Test::More tests => 1;

my $th_1 = threads->new(\&th1);

my $th_2 = threads->new(\&th2);

$th_1->join();
$th_2->join();

baumgartner
06-02-2006, 14:42
<mal vorweg>
Ich hab noch nie etwas mit threads gemacht, kann mir aber NICHT vorstellen, dass man hier nur über variablenbasis etwas übergeben kann :) </mal vorweg>

ja, und wo ist das problem?
du musst irgendeine art von kommunikationsverbindung dafür schaffen. ich würde hierfür wahrscheinlich unixdomainsockets verwenden.

mfg martin

reneeb
07-02-2006, 04:05
schau Dir mal
use threads::shared
an...