On Thu, 25 Aug 2005, ajpeck wrote:
> Is there a way to forcibly terminate a thread after a specified time 
> regardless if the thread is finished executing. 

The standard eval{}-timeout technique apparently works well for threads.
That is, wrap the code that might hang for 5 min in an eval{} block and
use an alarm to time it out, e.g.

eval {
  local %SIG{ALRM} = { die "TIMEOUT\n"; };
  alarm 5;
  <...your code here...>
  alarm 0;
}
giveup() if $@ =~ /^TIMEOUT/;

...where giveup() does whatver you need to do to exit from the thread 
prematurely.  In general, threads and signals are awkward to use together, 
but this particular idiom has been unproblematic for us in our threaded 
perl apps.

TomP

> I have threads which 
> call certain network functions that have very long hard coded timeouts, 
> such as 5 mins. A no response of 5 secs is sufficient for me to know 
> that there is a problem and the nature of it is not needed (device 
> switched off, network break, etc). These threads only write out a status 
> result (threads::shared variable) at the very end of the thread 
> execution, thus terminating the thread early from within the parent 
> thread and with no result written is good enough for me to know that 
> there is a problem.
> 
> Is there a way to impliment timed thread termination, if so I would 
> appreciate it very much for a very simple example.

-------------------------------------------------------------------------
Tom Pollard                                       [EMAIL PROTECTED]
Schrodinger, Inc.                                    646-366-9555 x102
-------------------------------------------------------------------------


_______________________________________________
Perl-Win32-Users mailing list
Perl-Win32-Users@listserv.ActiveState.com
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to