Joseph,
I am having the same crashing problem as you. However, I have a solution!
Instead of using fork(), which is implemented using ithreads, just use ithreads.
The code below requires Perl 5.8 or higher.
### Begin Source
use Win32::GUI;
use threads;
use vars qw( $Main );
$Main = new Win32::GUI::Window(
-name => "Main",
-text => "Thread Test",
-width => 500,
-height => 350,
-left => 100,
-top => 100,
);
$Main->AddButton(
-name => "Button",
-text => "Create Thread",
-align => 'center',
-valign => 'center',
-left => 350,
-top => 10,
);
$Main->AddRichEdit(
-name => "RichEdit",
-left => 10,
-top => 50,
-width => $Main->ScaleWidth-20,
-height => $Main->ScaleHeight-70,
-style => WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_LEFT | ES_MULTILINE |
ES_AUTOVSCROLL,
);
$Main->Show();
Win32::GUI::Dialog();
sub Main_Terminate {
return -1;
}
sub Button_Click {
threads->create(\&Do_Stuff)->detach;
# Note: by using detach() above, I am (falsely) assuming
# that this thread will quit before the program does
return 1;
}
# Call this with a thread
sub Do_Stuff {
$Main->RichEdit->ReplaceSel("Child thread $$ started.\r\n");
sleep(1);
$Main->RichEdit->ReplaceSel("Child thread $$ exiting.\r\n");
return;
}
### End Source
By the way, the bounce-back message you are getting from this list is just from
some random list subscriber whose account does not allow the email to go
through.
Trevor S Garside
[EMAIL PROTECTED]
> -----Original Message-----
> From: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED]
> Sent: Wednesday, April 02, 2003 3:04 PM
> To: Garside, Trevor
> Cc: [email protected];
> [EMAIL PROTECTED]
> Subject: RE: [perl-win32-gui-users] Unresponsive Window
>
>
>
> The code is below. This is the code I'm working with to try
> and figure out
> how to get fork to work. But it is pretty much the same as
> my production
> code (same problem) except instead of going to sleep it does
> something that
> takes several minutes to run, and the window has more objects
> and looks
> nicer (but that isn't really important). You can change the
> value of the
> $howlong variable to decide how long it will sleep.
> Basically just click
> the button and then do things to the window or on the
> desktop. At the very
> least you will get a memory error when you exit the program.
> But sometimes
> you will also get it after the child process finishes. I
> found an example
> of a fork script that included several clean up (kill the
> child process
> when it was done, etc...). I used it to write a script that
> would just
> call one child process and then quit, it worked fine until it
> was added to
> a script that uses Win32::GUI. There must be one additional clean up
> process that needs to be done, I just don't know what it is.
>
> The reason that I didn't cc to the mailing list is because
> the last two
> times I got an automated message from the admin of the mail
> list that read
> the email was a possible Spam letter and that it would not be
> sent. But it
> was sent anyway. I replied back asking why I got the message, but I
> haven't heard back from anyone. I'll cc the mail list,
> hopefully it was
> just a glitch.
>