Все работает очень хорошо, но не тогда, когда у меня есть Theads.
x.pl
Код: Выделить всё
use strict;
use warnings;
use lib ".";
use MyP;
use Inline Java => bar (4); # ok
my $myp = MyP->new ($myx);
print "\n3) " . $myp->x1 (); # ok
print "\n4) " . $myp->x2 (); # ok
$myp->start (); # NOK
for (;;)
{
sleep (1);
}
print "\n";
Код: Выделить всё
package MyP;
use threads;
use threads::shared;
use strict;
use warnings;
sub new
{
my $class = shift;
my $self = {};
$self->{myx} = shift;
bless ($self, $class);
return $self;
}
sub x1
{
my $self = shift;
return MyX->foo (6);
}
sub x2
{
my $self = shift;
return $self->{myx}->bar (7);
}
sub start
{
my $self = shift;
threads->create (\&run, $self);
}
sub run
{
my $self = shift;
print "\nT1) " . MyX->foo (10); # static
print "\nT2) " . $self->{myx}->bar (20); # by instance
}
1;
Код: Выделить всё
1) 4
2) 8
3) 7
4) 14
Thread 1 terminated abnormally: Unknown Java object reference main::MyX=HASH(0x55dd5252bee8) at MyP.pm line 45 thread 1.
at MyP.pm line 45 thread 1.
Я пробую это с помощью переданного экземпляра или статического способа.
Подробнее здесь: https://stackoverflow.com/questions/781 ... -reference
Мобильная версия