Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Reaped: Problem with win32::GUI using telnet

by NodeReaper (Curate)
on Apr 02, 2013 at 07:41 UTC ( #1026608=perlquestion: print w/ replies, xml ) Need Help??
NodeReaper has asked for the wisdom of the Perl Monks concerning the following question:

This node was taken out by the NodeReaper on Apr 02, 2013 at 08:29 UTC
Reason: [BrowserUk]: Reap:Duplicate of 1025656

You may view the original node and the consideration vote tally.

Comment on Reaped: Problem with win32::GUI using telnet
Re: Problem with win32::GUI using telnet
by Loops (Hermit) on Apr 02, 2013 at 08:46 UTC
    Hello,

    Unfortunately there is no easy fix for your problem. The issue is that the Windows GUI expects you to pass it control at regular intervals when you're in a loop using:

    Win32::GUI::DoEvents();

    However, because you're using Net::Telnet and it's waitfor method, you've handed over control and blocked your entire program until the matching text is detected. Thus everything in your program blocks and your GUI freezes.

    For more information see the Win32::GUI faq

    You have many options. One is to go through the gymnastics of running the telnet portion of your code in a thread and reading output from it in a loop that calls DoEvents. Or you could just grab a copy of Net::Telnet and modify it to do that internally

    Short of developing your own network and telnet code, a wrapper around each blocking call to the Telnet module may be the easiest answer. It could generate and trap and alarm if the code takes too long. If the alarm fires, call DoEvents() and then restart the Telnet operation.

    No guarantees that would work of course. It may introduce some subtle timing problems. Would be much cleaner to find an Asynchronous Telnet module to use,or bite the bullet and write your own networking code that doesn't block.

      Short of developing your own network and telnet code, a wrapper around each blocking call to the Telnet module may be the easiest answer.

      Wow! Great idea. Like regulating the speed of your car by turning the engine on and off.

      Od course, he could also try the simple solution Corion already suggested in the other thread.


      With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.

        Will try that with my car on the way to work tomorrow. ;o) Much agreed about the better solution in the other thread. Wish I had seen it before nattering on.

        Cheers.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1026608]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (10)
As of 2014-09-17 12:16 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (74 votes), past polls