in reply to Re^2: Calling exit() in thread does not call exit handler
in thread Calling exit() in thread does not call exit handler
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
|
|---|