Steve, SOme complete test code below. Please try to compile it with perl2exe to produce the error twice, the first time without modifications, then uncomment the line use Win32::API I also produced the error when using the line threads->tojoin
# Code start
#==========================================================
$| = 1;
#print "Content-type: text/html\n\n";
#use CGI::Carp qw(fatalsToBrowser);
#==========================================================
use threads;
use threads::shared;
use Thread::Running;
use LWP::UserAgent;
use attributes;
use WIn32::API;
#use Win32::FileOp;
#my %Result;
#my %Done;
share %Result;
share %Done;
#==========================================================
use Win32::GUI;
$MW = new Win32::GUI::Window(
-title => 'hello.pl',
-left => 100,
-top => 100,
-width => 400,
-height => 200,
-name => 'MainWindow',
-visible => 1,
);
$PrintMsg = $MW->AddLabel(
-text => "Processing:",
-name => "ProcessingLabel",
-left => 30,
-top => 30,
-width => 290,
-height => 20,
-foreground => 0,
-visible=> 1,
);
#----------------------------------------
&StartThreads;
$MW->Show();
Win32::GUI::Dialog;
#----------------------------------------
sub MainWindow_Terminate {
return -1;
}
#==========================================================
sub StartThreads{
my ($x, @x, @url);
$x = 0;
undef @x;
@url = ('http://search.cpan.org/', 'http://yahoo.com/', 'http://mewsoft.com/',
'http://ayna.com/', 'http://arabikx.com/',
'http://maktoob.com/', 'http://masrawy.com/', 'http://ajeeb.com/',
'http://egypt.com/', 'http://search.com/');
undef %Thread;
undef %Done;
undef %Result;
for $x(0..9) {
$y[0] = $x;
$y[1] = $url[$x];
$Done{$x} = 2;
$Thread{$x} = threads->new(\&get_url, @y);
$Thread{$x}->detach();
$PrintMsg->Text("Created thread $x...");
}
#$Thread{0}->join;
#sleep 1 until threads->tojoin;
#while (! threads->tojoin) {print ".";sleep 1;} # This created the error The
memory can not be "read".
#$_->join foreach threads->tojoin; # join all joinable threads
while (1) {
while (my($k, $v) = each %Done) {
if ($v==1) {
$PrintMsg->Text("Finished Thread $k...");
delete $Done{$k};
}
}
my $k = keys %Done;
if (!$k) {last;}
Win32::GUI::DoEvents();
};
$PrintMsg->Text("Finished ALl Threads...");
return 1;
}
#==========================================================
sub get_url{
my ($id, $url) = @_;
my ($text);
my $ua = LWP::UserAgent->new;
my $response = $ua->get($url);
if ($response->is_success) {
$text = $response->content; # or whatever
#print STDERR "Success URL: $url \n";
}
else {
#print STDERR "Error URL: $url \n";
$text = $response->status_line;
}
#return $text;
$Result{$id} = $text;
$Done{$id} = 1;
#return "$id\n";
}
#==========================================================
#Code End
regards
Ramy
----- Original Message -----
From: Steve Pick
To: [EMAIL PROTECTED] ; [email protected]
Sent: Sunday, January 25, 2004 3:45 AM
Subject: Re: [perl-win32-gui-users] Win32::FileOp Erro with Win32::GUI
Hi again,
Maybe if you send me the source of an example that causes the error I could
look into a fix for you, but I'm not promising anything. You'll really need to
talk to Aldo Calpini about this. He wrote Win32::GUI and Win32::API, and his
website is at http://dada.perl.it/
Although he assumedly reads this list every now and again to see how people
are abusing his babies, he hasn't posted in a very long time.
Steve
----- Original Message -----
From: [EMAIL PROTECTED]
To: Steve Pick ; [email protected]
Sent: Sunday, January 25, 2004 1:13 AM
Subject: Re: [perl-win32-gui-users] Win32::FileOp Erro with Win32::GUI
Dear Steve,
Thanks first for your prompt reply.
After some investigation of removing the modules from the script,
I found out that the main source of the error come from Win32::API module
Since the Win32::FileOp Which uses the Win32::API therefore it generates
the error
That means a big loose for me and everyone that can not use Win32::API
module
and all modules based on using it to load and interface to windows with
threads
as it makes life easier with loading dll's.
I am not sure if WIn32::API is actively updated or not as this may be a
little bug in it
Regards
Ramy
----- Original Message -----
From: Steve Pick
To: [EMAIL PROTECTED] ; [email protected]
Sent: Sunday, January 25, 2004 3:03 AM
Subject: Re: [perl-win32-gui-users] Win32::FileOp Erro with Win32::GUI
Hi Ramy,
Could you verify that Win32::GUI is causing this by testing without GUI
code running. Create an application that uses threads and Win32::FileOp without
Win32::GUI loaded and see if the problem still occurs. If so, it's out of our
hands and is a fault in Win32::FileOp. A lot of modules are not
threads-compatible, and it's probable that Win32::FileOp is one of them.
If it only happens with Win32::GUI loaded, please let us know and we'll
undoubtable jump at the chance to look into it, such a powerhouse of activity
that we are.
Thanks,
Steve
----- Original Message -----
From: [EMAIL PROTECTED]
To: [email protected]
Sent: Saturday, January 24, 2004 10:24 PM
Subject: [perl-win32-gui-users] Win32::FileOp Erro with Win32::GUI
Hi All,
I noticed that when I use the module Win32::FileOp
in a GUI application (may be also not gui) in a Threads,
When the threads starts, the script shows error
that says :
The instruction at "0x28053f9a" referenced memory at "0x000010c0". The
memory ould not be "read".
Click on OK to terminate the program
Click on CANCEL to debug the program
and sometimes it is The memory ould not be "Written" instead of "read".
I actually found that if I use the module "Win32::API" it will generate
this error and of course Win32::FileOp use internally this module.
The threads works fine if I remove the "use Win32::FileOp;" line but
I need to use it for the File Open and Save Dialogs.
Any solutions or suggestions?
Thank you in advance for help
Ramy
threads-test.cgi
Description: Binary data

