sub Functions_Run_in_threads_windows { my (%hash)=@_; printer::Logger_screen_message ("Info", "Start", "", $logger); my @temp_file; if(!%hash) { printer::Logger_screen_message("Error","Functions_Run_in_threads: The hash is empty",1,$logger); return %hash; } my ($functions_name,@temp_params,@parameters,%hash_results); @threads = (); for( my $i=0 ; $hash{"params_name_$i"} ; $i++) { @temp_params=$hash{"params_name_$i"}; $functions_name=$hash{"function_name_$i"}; @parameters=(); #push (@parameters,$functions_name); if(!@{$temp_params[0]}) #check input if not reference return fail { printer::Logger_screen_message("Error","Please send parameters array as referens",1,$logger); return %hash; } #parse hash table and run the function for( my $index=0 ; $index<@{$temp_params[0]} ; $index++) { if($temp_params[0][$index]) { $tmp=$temp_params[0][$index]; push(@parameters,$tmp); } else { push(@parameters,""); } } #Start new thread my $t = threads->create (sub{ $SIG{ALRM} = sub { die("Timeout\n"); }; \&$functions_name(@parameters); }); push(@threads,$t); } my $index=0; foreach my $thread (@threads) #wait for all threads untill the end and insert results to hash { $hash_results{$index}=$thread->join; $index++; } return %hash_results; }