I'd love it if I could just upgrade perl, but corporate bureaucracy sucks
and the new versions need approval for security purposes.  I initially
tried it with 5.6.1 with less success, and 5.8.0 seems to be very close
less the is_running issue.  All I really need is some way to determine if
the thread is still running even if it's checking if the process id
exists. When it is, I want to SIGUSR1 the thread.

'threads' is a standard module, so I have no clue why it's having amnesia.
 The module is found at C:/Perl/lib/threads.pm and not part of the ppm.

Here is a short example of threads I'm testing:

<xmp>
# Test Threads
use threads;
use threads::shared;
use strict;
use vars qw ($counter $thr);

Log ("Starting Thread Test");
$thr = threads->create (\&ChildThread, 0, 1);

$counter = 0;
while ($counter++ < 10) {
   Log ("This is the main thread (".$counter." sec)");
   sleep (1);
}

# The following gives an error that is_running.al is missing.
# Tried threads->list (threads::running) to search and compare: gave
bareword error.
# Tried "$thr->is_running" without success: also said is_running.al missing.
while ($thr->is_running()) {
   Log ("Killing thread.");
   $thr->kill('SIGUSR1');
   sleep (4);
}

Log ("Thread killed.");

# Functions

sub Log { my( $Message ) = @_; print $Message."\n"; }

sub ChildThread {
   my ($counter, $to_screen) = @_;
   my $count = 0;
   our $thread_term = 0;
   $SIG{'SIGUSR1'} = sub { Log('Received user1 notice.'); $thread_term =
1; return 0; };
   $SIG{'KILL'} = sub { Log('Received kill notice.'); $thread_term = 1;
return 0; };

   while (!($thread_term)) {
      Log ('This is the child thread ('.($count++ * 2).' sec)');
      sleep (2);
   }
   Log ('Thread has ended.');
}
</xmp>


>> Hi All,
>>
>> I'm attempting to use the 'threads' module in ActivePerl 5.8.0 build
>> 805.
>> Everything seems to work until I attempt to shut the process down
>> gracefully.  When I call is_running() the whole thing crashes with
>> the following output (main thread starts the shutdown after 10
>> seconds):
>>
>> Starting Thread Test
>> This is the main thread (1)
>> This is the child thread (0)
>> This is the main thread (2)
>> This is the main thread (3)
>> This is the child thread (1)
>> This is the main thread (4)
>> This is the main thread (5)
>> This is the child thread (2)
>> This is the main thread (6)
>> This is the main thread (7)
>> This is the child thread (3)
>> This is the main thread (8)
>> This is the main thread (9)
>> This is the child thread (4)
>> This is the main thread (10)
>> Can't locate auto/threads/is_running.al in @INC (@INC contains:
>> C:/Perl/lib C:/P
>> erl/site/lib .) at thread_test.pl line 26 A thread exited while 2
>> other threads were still running.
>>
>> I'm including the module as follows:
>>
>> use threads;
>> use threads::shared;
>> use strict;
>>
>> Any idea why it can't find that function?
>
> How are you calling it?
>
> A small self contained example script that demonstrates the problem
> would help.
>
> Note that your Perl version is pretty old. Perl's threading was not
> nearly as mature as it is now (and some would say that it is still not
> mature enough for production use). I recommend installing a much later
> version.
>
> HTH
>
> --
> Brian Raven
>
> =========================================
> Atos Euronext Market Solutions Disclaimer
> =========================================
>
> The information contained in this e-mail is confidential and solely for
> the intended addressee(s). Unauthorised reproduction, disclosure,
> modification, and/or distribution of this email may be unlawful.
> If you have received this email in error, please notify the sender
> immediately and delete it from your system. The views expressed in this
> message do not necessarily reflect those of Atos Euronext Market
> Solutions.
>
> Atos Euronext Market Solutions Limited - Registered in England & Wales
> with registration no. 3962327.  Registered office address at 25 Bank
> Street London E14 5NQ United Kingdom.
> Atos Euronext Market Solutions SAS - Registered in France with
> registration no. 425 100 294.  Registered office address at 6/8 Boulevard
> Haussmann 75009 Paris France.
>
> L'information contenue dans cet e-mail est confidentielle et uniquement
> destinee a la (aux) personnes a laquelle (auxquelle(s)) elle est adressee.
> Toute copie, publication ou diffusion de cet email est interdite. Si cet
> e-mail vous parvient par erreur, nous vous prions de bien vouloir prevenir
> l'expediteur immediatement et d'effacer le e-mail et annexes jointes de
> votre systeme. Le contenu de ce message electronique ne represente pas
> necessairement la position ou le point de vue d'Atos Euronext Market
> Solutions.
> Atos Euronext Market Solutions Limited Société de droit anglais,
> enregistrée au Royaume Uni sous le numéro 3962327, dont le siège social se
> situe 25 Bank Street E14 5NQ Londres Royaume Uni.
>
> Atos Euronext Market Solutions SAS, société par actions simplifiée,
> enregistré au registre dui commerce et des sociétés sous le numéro 425 100
> 294 RCS Paris et dont le siège social se situe 6/8 Boulevard Haussmann
> 75009 Paris France.
> =========================================
>
> _______________________________________________
> ActivePerl mailing list
> ActivePerl@listserv.ActiveState.com
> To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs
>


_______________________________________________
ActivePerl mailing list
ActivePerl@listserv.ActiveState.com
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to