package My::ThreadWorker; ########################################################### # USES ########################################################### use strict; use warnings; use base 'Exporter'; use My::Globals; use My::ThreadManager; use Data::Dumper; use feature qw(say); ########################################################### # EXPORT ########################################################### our @EXPORT = qw( work ); ########################################################### # VARIABLES ########################################################### # NONE ########################################################### # PUBLIC FUNCTIONS ########################################################### sub work { my ($ref_thread_data) = @_; while( $ref_thread_data->{'number'} <= 100 ) { print $ref_thread_data->{'number'} . " "; select(undef, undef, undef, 0.1); $ref_thread_data->{'number'} += 1; # NOTE: # Bad design because My::ThreadWorker needs # My::ThreadManager and My::ThreadManager # needs MyThreadWorker if( My::ThreadManager::shallWorkBeCancelled() == TRUE ) { print "\n"; return CANCEL; } } print "\n"; }