Re: How do you share an object(Telnet Sesion) between threads?

[email protected] (James Lynes)
Newsgroups perl.wxperl.users
Message-ID <CABPysegfBzv-3J1Uzgr6TEWatk-SbHbxNdMtxtW71AB9KcLqoA@mail.gmail.com>
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 <
[email protected]> 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>
>>
>>
>>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.