Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Re^3: Threads and TCL DeleteInterpProc

by Anonymous Monk
on Jun 13, 2014 at 09:32 UTC ( #1089803=note: print w/ replies, xml ) Need Help??


in reply to Re^2: Threads and TCL DeleteInterpProc
in thread Threads and TCL DeleteInterpProc

A question for you, how far does your program go before the Tcl error shows up? Devel::Trace

Reminds me of Re^3: TKX and closing windows (bug) ..

L'anana ne parlais pas .... so this is the way I'd structure the program to avoid any Tkx noise .... I don't see an use for Thread::Semaphore

#!/usr/bin/perl -- use strict; use warnings; use threads stack_size => 4096; use Thread::Queue; Main( @ARGV ); exit( 0 ); sub Main { my $maxJobs = 5; my $q = Threads::Queue->new; my @workers = map { threads->create( \&Worker, $q ) } 1 .. $maxJo +bs; my $prompter = threads->create( \&Prompter, $q, $maxJobs ); # job +pusher #~ $prompter->join; #~ $_->join for @workers; $_->join for threads->list; ## wait for prompter, workers } sub Prompter { require Tkx; ### important, only thread with tkx stuff my( $q, $maxJobs ) = @_; my( $date_fic, $date_mois ) = DateFicMois(); # Time::Piece, strfti +me ... whatever ... AddJob( $q, $fic, $source, $rep, $cas ); ... unless( $rep_fichiers ){ SignalNoMoreJobs( $q, $maxJobs ); die "Maybe Exit9() if your heart is set on it"; } ... AddJob( $q, $fic, $source, $rep, $cas ); ... SignalNoMoreJobs( $q, $maxJobs ); return; } sub AddJob { my $q = shift; $q->enqueue( [ @_ ] ); return; } sub SignalNoMoreJobs { my( $q, $maxJobs ) = @_; $q->enqueue( undef ) for 1 .. $maxJobs; return; } sub Worker { my( $q ) = @_; while( defined( my $ficArgs = $q->dequeue ) ) { recup_fic( @$ficArgs ); } return; }

As you can see, the more well named subs you have, the less comments you need

See also Ask - ask your users about stuff / ask-introduction.pod

You can use utf8 to signal to perl that your file is written in utf8, so you don't have to decode("utf8" all over the place

Also see Win32::Unicode::Native since I assume you're on win32 ... for unicode version of mkdir/open... so you don't have to encode("iso-8859-1" ...

Also, if you still need to encode("iso-8859-1" .... don't do it all over the place (repetition hurts your fingers), do it in one helper subroutine, say in recup_fic or MyMkdir ...

I would also consider  my $answer = YesNo( "question", "title" ); and  ReadThis( $msg, $title ); ... although  Info( $msg, $title ); sounds good .... there is a Ask::Tk, a Ask::Tkx should be only a few tweaks to that


Comment on Re^3: Threads and TCL DeleteInterpProc
Select or Download Code
Re^4: Threads and TCL DeleteInterpProc
by x-lours (Acolyte) on Jun 17, 2014 at 13:59 UTC
    as i wrote, i can't install any module (i don't know how installing them manualy, i read about but don't understand much...)

    so i can't use Devel::Trace , Win32::Unicode::Native or Ask::Tkx

    but thanks for the explanations and advices
Re^4: Threads and TCL DeleteInterpProc
by x-lours (Acolyte) on Jun 17, 2014 at 14:04 UTC

    PS

    the use of Semaphore is in the "sub recup_fic" to avoid more than 5 threads when i save the nearly 30 files of the "@lst_log"

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1089803]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (4)
As of 2014-07-22 08:04 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My favorite superfluous repetitious redundant duplicative phrase is:









    Results (106 votes), past polls