I use a thread to be able to force an exit of the main thread
That is really, really, really bad design -- (*)like designing a train where the only way to get off is to smash a window and jump; and hoping that there'll be somewhere soft to land -- and it will come back to bite you!
* That's a pretty terrible analogy; maybe this is better: Like designing a satnav such that when you reach your destination, it kills your engine dead and then relies upon the anti-skid brakes and collision avoidance systems to bring you to a halt safely.
I seriously caution you against taking this design forward. Especially when it is so simple to avoid it:
use strict;
use threads;
use threads::shared;
my $inthread : shared;
sub doCleanUp {
print "doing cleanup";
}
my $threadsleeptime : shared = 2;
my $mainsleeptime = 5;
my $thread = async {
eval {
$inthread = 1;
sleep($threadsleeptime);
print "Sleep in thread finished\n";
die('abnormal exit');
};
if( $@ =~ /^abnormal exit/ ) {
print "triggering cleanup in main\n";
return -1;
}
return 0;
};
$thread->join() and doCleanUp() if ($thread);
print "End of main program\n";
__END__
C:\test>junk29
Sleep in thread finished
triggering cleanup in main
doing cleanupEnd of main program
With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
|