From: Stephen P. <Ste...@uc...> - 2004-01-15 14:34:22
|
Windows 2000, SP 4. > -----Original Message----- > From: per...@li... > [mailto:per...@li...]On Behalf Of > Johan Lindstrom > Sent: 15 January 2004 14:29 > To: per...@li... > Subject: Re: [perl-win32-gui-users] GUI loft crashes >=20 >=20 > At 13:59 2004-01-15, Stephen Pick wrote: > >I just got the latest version of TGL, and it won't start.=20 > Tries to read > >memory at 0x0000000. This problem is something I commonly=20 > associate with > >missing files given to imagelists, bitmaps, etc. Or maybe PAR is to > >blame. >=20 > Which OS? >=20 > I've had one report (which I unfortunately haven't answered=20 > yet, sorry=20 > about that) that TGL doesn't work under Windows XP, but it=20 > sounded similar=20 > to other reports on this list that Win32::GUI doesn't work=20 > under XP either,=20 > so I'm not entirely sure it's a TGL thing or a=20 > certain-flavour-of-Windows-XP thing. >=20 > I switched to PAR because PerlApp (a very old version)=20 > couldn't create an=20 > .exe last time I tried and it seemed the simplest solution at=20 > the time. >=20 >=20 > /J >=20 > -------- ------ ---- --- -- -- -- - - - - - > Johan Lindstr=F6m Sourcerer @ Boss Casinos johanl@DarSerMan.com >=20 > Latest bookmark: "Enabling WebDAV on Apache" > http://www.serverwatch.com/tutorials/article.php/2176771 > dmoz (1 of 30): /Computers/Software/Internet/Servers/ 52 >=20 >=20 >=20 > ------------------------------------------------------- > This SF.net email is sponsored by: Perforce Software. > Perforce is the Fast Software Configuration Management System offering > advanced branching capabilities and atomic changes on 50+ platforms. > Free Eval! http://www.perforce.com/perforce/loadprog.html > _______________________________________________ > Perl-Win32-GUI-Users mailing list > Per...@li... > https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users >=20 |
From: Nigel C. <nhc...@ho...> - 2004-01-15 17:17:31
|
hi there I have a console application, that I want to have show an icon on the status bar - This is no problem with Win32::GUI::Icon. However, I do not want the application to hang, waiting for an event from the (hidden) window - Really the icon is there to show the console app is running, and also to be clicked to exit. Is there any way to display the icon, but allow the main application to carry on doing its thing in the background (my application is listening for a socket connection) Many thanks Nigel |
From: Jez W. <je...@je...> - 2004-01-15 17:41:49
|
Hi, If you want your icon to interact with the user you have to enter the dialogue phase at some point. I assume the you are waiting on the socket for a reply? If that is the case, then the solution is not straightforward, unless you use threads (one thread doing the sockets, with the other dealing with the gui). There is another solution if you are prepared to poll the sockets. I had a application where a server was processing information from several clients. The application had to provide logging information (as data arrived from the sockets) into a window. The polling function looped round all open sockets without waiting. The polling function was in turn called by a timer. All though it sounds quite clunky, it worked quite well. Does that make any sense? I might not have understood what you want to do. Cheers, jez. ----- Original Message ----- From: "Nigel Cannings" <nhc...@ho...> To: <per...@li...> Sent: Thursday, January 15, 2004 5:16 PM Subject: [perl-win32-gui-users] Avoiding applications hanging? > hi there > > I have a console application, that I want to have show an icon on the status > bar - This is no problem with Win32::GUI::Icon. > > However, I do not want the application to hang, waiting for an event from > the (hidden) window - Really the icon is there to show the console app is > running, and also to be clicked to exit. > > Is there any way to display the icon, but allow the main application to > carry on doing its thing in the background (my application is listening for > a socket connection) > > Many thanks > > Nigel > > > ------------------------------------------------------- > The SF.Net email is sponsored by EclipseCon 2004 > Premiere Conference on Open Tools Development and Integration > See the breadth of Eclipse activity. February 3-5 in Anaheim, CA. > http://www.eclipsecon.org/osdn > _______________________________________________ > Perl-Win32-GUI-Users mailing list > Per...@li... > https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users |
From: Johan L. <johanl@DarSerMan.com> - 2004-01-15 21:40:00
|
At 18:16 2004-01-15, Nigel Cannings wrote: >Is there any way to display the icon, but allow the main application to >carry on doing its thing in the background (my application is listening for >a socket connection) There are a couple of ways to do this: 1. Run your application in the spare time. Use a Win32::GUI::Timer and call your application from the event that gets fired by the Timer. 2. Run the GUI in the spare time. If your program has an idle loop that never blocks for more than fractions of a second, you can call Win32::GUI::DoEvents() to have the GUI process Windows events. But this doesn't work if there are things that take longer than that, causing the GUI to be unresponsive. 3. Run the GUI in a separate thread. I haven't done this in a real program, but below is a simple example I whipped up out of curiosity. Perl threading, available from 5.8.0, is limited and possibly unstable (especially >= 5.8.2 seems very fragile). But I would imagine it's useful for implementing a simple messaging system so commands can be passed from the GUI and information+events be passed to the GUI. There are two files: test32.pl and test32-gui.pl The Win32::GUI stuff isn't brought in until after the GUI thread is started. I'm not sure it won't work to do it before, but I suspect some XS or Windows structures will get screwed up by the two threads both using them in inconsistent ways. But maybe not since nothing is shared by default. The shared variables are declared and shared before the thread is started. That may not be necessary, I don't know. Without the final join(), Perl crashes. So it's probably wrong to not do it :) I don't really know threads or how they work, so please fill in the blanks here. #!/usr/local/bin/perl -w #test32.pl use strict; use threads; use threads::shared; our $randomNumber = 37; #The least random number share($randomNumber); our $exitProgram = 0; share($exitProgram); my $oGuiThread = threads->create( sub { eval q{require "test32-gui.pl"} }); while(! $exitProgram) { print "In main, random is ($randomNumber)\n"; sleep(1); } $oGuiThread->join(); __END__ #!/usr/local/bin/perl -w #test32-gui.pl use strict; use Win32::GUI; my $winMain = new Win32::GUI::Window( -left => 13, -top => 32, -width => 439, -height => 260, -name => "winMain", -text => "Autoscroller", ); $winMain->AddButton( -text => "&Random", -name => "btnRandom", -width => 150, -height => 21, -left => 30, -top => 20, ); $winMain->Show(); sub ::winMain_Terminate { $::exitProgram = 1; return(-1); } sub ::btnRandom_Click { $::randomNumber = int(rand(1000)); print "Button handler, setting random number to ($::randomNumber)\n"; return(1); } Win32::GUI::Dialog(); __END__ /J -------- ------ ---- --- -- -- -- - - - - - Johan Lindström Sourcerer @ Boss Casinos johanl@DarSerMan.com Latest bookmark: "Professor Lives Life As a Cyborg" <http://story.news.yahoo.com/news?tmpl=story&u=/ap/20040110/ap_on_hi_te/internet_profile_cyborg_1> dmoz (1 of 30): /Computers/Software/Fonts/ 96 |
From: Steve P. <st...@ba...> - 2004-01-16 07:48:37
|
Hi Nigel, You need select()! It's the best thing in the world (honest). The following routine will check for activity on the socket "MYSOCKET" (you can change this, if you want to pass a socket as an argument, just use scalars instead of barewords for socket handles, and pass the socket like a normal sub argument). If no activity occurs in 0.5 seconds, it will return 0. Otherwise it will return 1. You can then have a while loop somewhere in your program that keeps checking until you get a connection, or some data, or whatever. sub checkfordata { my $timeout = 0.5; # half a second my $bits = ""; vec($bits,fileno(MYSOCKET),1) = 1; my $rout; select($rout=$bits, undef, undef, $timeout); if(vec($rout,fileno(MYSOCKET),1) == 1) { # We have some data to read! (connection, incoming packet, yada yada) return 1; } else { return 0; } } Hope that helps out Steve. ----- Original Message ----- From: "Nigel Cannings" <nhc...@ho...> To: <per...@li...> Sent: Thursday, January 15, 2004 5:16 PM Subject: [perl-win32-gui-users] Avoiding applications hanging? > hi there > > I have a console application, that I want to have show an icon on the status > bar - This is no problem with Win32::GUI::Icon. > > However, I do not want the application to hang, waiting for an event from > the (hidden) window - Really the icon is there to show the console app is > running, and also to be clicked to exit. > > Is there any way to display the icon, but allow the main application to > carry on doing its thing in the background (my application is listening for > a socket connection) > > Many thanks > > Nigel > > > ------------------------------------------------------- > The SF.Net email is sponsored by EclipseCon 2004 > Premiere Conference on Open Tools Development and Integration > See the breadth of Eclipse activity. February 3-5 in Anaheim, CA. > http://www.eclipsecon.org/osdn > _______________________________________________ > Perl-Win32-GUI-Users mailing list > Per...@li... > https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users > |