Hi Steve:

The Monks said basically you can't do that. Not supported by
threads::shared. Only references to shared scalers are supported. Possibly
a convoluted way to manipulate object internals. Several have tried in the
past with limited success.

It was suggested to refactor as a server process that handles all Telnet
interactions. I'm working on that now. Having a subtle compiler error that
I am working at figuring out.

I appreciate your responses.

James



On Wed, Sep 30, 2015 at 7:44 AM, Steve Cookson - gmail <
steveco.1...@gmail.com> wrote:

> 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>
>>
>>
>>
>

Reply via email to