http://www.perlmonks.org?node_id=1025656

ckant8 has asked for the wisdom of the Perl Monks concerning the following question:

Hi, I am looking for the help to build a small internal GUI tool using Perl. I am unable to implement the thread in Perl using Win32::GUI. Could anybody post documentation, examples regarding this. Thanks Sri

Replies are listed 'Best First'.
Re: Thread implementation for Win32::GUI
by Corion (Patriarch) on Mar 27, 2013 at 09:17 UTC

    What code have you written and where do you encounter problems?

      Please find below code. When i am running it window is freezing. i want to implement thread to not to freeze UI while background process is going on.
      use strict; use warnings; use Net::Telnet; use Win32::API; use Win32::GUI(); my $main = Win32::GUI::Window->new( -name => 'Main', -width => 500, -height => 900, -text => 'Perl', -minsize => 500, 900, ); my $font = Win32::GUI::Font->new( -name => "Comic Sans MS", -size => 8 +,); $main->AddLabel(-text => "Welcome ", -pos => [ 10, 10 ],); $main->AddLabel(-text => "Enter Host Name / IP : ", -pos => [ 10, 33 +], ); my $t= $main->AddTextfield( -name => 'tfResults', -text => "", -pos = +> [ 125, 30 ], -size => [ 100, 25 ], -tabstop => 1, ); my $my_but = $main->AddButton(-text => "Submit",-name => 'btQuery', -p +os => [ 235, 30 ],-size => [ 50, 25 ],); $main->Show(); Win32::GUI::Dialog(); sub btQuery_Click { my $txt1=$t->Text; my $telnet = new Net::Telnet ( Timeout=>1800, Errmode=>'die', + ); chomp $txt1; $telnet->open($txt1); $telnet->waitfor('/login: $/i'); $telnet->print('root'); $telnet->waitfor('/Password: $/i'); $telnet->print('dangerous'); $telnet->waitfor('/# $/i'); print "\nConnected to host :$txt1 "; $main->AddLabel(-text => " Enter custom cmd:",-pos => 100, 100 ,-siz +e => 250, 125 ,); my $t1= $main->AddTextfield(-name => 'tfResults2',-text => "",-pos = +> 130, 100 ,-size => 100, 25 ,); my $submit=$main->AddButton(-text => "Submit",-name => 'Unix_submit' +,-pos => 250, 100 ,-size => 50, 25 ,); sub Unix_submit_Click { } }

        I recommend moving the actual work to be done into its own thread, most likely by using threads and Thread::Queue for the communication. Maybe the worker thread can signal to the main/UI thread by sending a window message.

        If you add:

        use strict; use warnings;

        To the top of your program and then fix-up all the warnings you get; and then format your code so that it is readable; and post that.

        And then explain why you are defining functions within functions?

        And then explain what problems you are having adding threading?

        You might get some help.


        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.
      Thx Corion. Could you please let me know where to start thread, after "$main = Win32::GUI::Window->new( -name => 'Main', -width => 500, -height => 800, -text => 'Perl', -minsize => 500, 800, );" or before that??