Hi James,
I'm not sure what you already know, but any OO-style module should be of
the form $obj=Foo::Bar->new();
$obj is a pointer that holds the class and the object as the first two
variables and you should be able to access anything from it.
use Net::Telnet ();
$obj = Net::Telnet->new(Timeout=> 20);
Maybe you could take the while(1) out of the connect() sub routine and then
return $telnetsession;
As the last line of the routine.
Here is an example of how it can work:
http://www.perlfect.com/articles/telnet.shtml
I also suggest that while(1), is a bit uncompromising,
while(!$common{connected}) would be more controlled and using a for loop
to try a limited number of times, even more so.
Good luck,
Regards
Steve.
On 29/09/15 18:35, James Lynes wrote:
How do you share an object(Telnet Sesion) between threads?
I need the Telnet session below available to 3 threads(connect,
disconnect, & scan). $telnetsession is of type Net::Telnet per
print(ref($telnetsession)).
This is part of a larger wxPerl script. All of the display and
interlocking between the GUI and threads seems to working corectly.
Crossposted to wxperl-users.
Thanks,
James
<code>
# Define the Thread shared data area - All threads access this scaler
data fine
my %common : shared;
$common{ip} = "127.0.0.1"; # Localhost
$common{port} = "7356"; # Local Port as defined in gqrx
$common{telnetsession} = 0; # Object Pointer ??? Problem ???
$common{tnerror} = 0; # Status
$common{connect} = 0; # Command
$common{connected} = 0; # Status
$common{disconnect} = 0; # Command
$common{scanstart} = 0; # Command
$common{scanstarted} = 0; # Status
$common{beginf} = 0; # Scan - Beginning Frequency
$common{endf} = 0; # Scan - Ending Frequency
$common{step} = 0; # Scan - Frequency Step
$common{squelch} = 0; # Scan - Minimum RSSI(Recieved Signal
Strength Indicator)
$common{rssi} = 0; # Scan - Latest RSSI
$common{pause} = 0; # Scan - Time between scans - msec
$common{listen} = 0; # Scan - Time to Listen to a strong
signal - msec
$common{mode} = 0; # Scan - Demodulator Type
$common{stopthreads} = 0; # Command
# Connect the Telnet Session - #1
sub Connect {
while(1) {
if($common{stopthreads}) {print "\nConnect Thread
Terminated\n"; return};
if($common{connect}) {
if(!$common{connected}) {
print "Open Telnet Connection to gqrx\n";
my $telnetsession = Net::Telnet->new(Timeout => 2, port
=> $common{port},
Errmode => sub
{$common{tnerror} = 1;});
$telnetsession->open($common{ip});
$common{telnetsession} =
shared_clone($telnetsession); # Line 92 Errors
$common{connected} = 1;
$common{connect} = 0;
}
}
threads->yield();
}
}
</code>
<code>
Error message:
Thread 1 terminated abnormally: Unsupported ref type: GLOB at
./threadedgqrxLite.pl line 92 thread 1
</code>