Je cherche des infos sur comment passer des paramètres d'un thread A (principale) a un thread B je n'ai pas encore commencé a coder mon applie car j'ai ce problème qui ce pose et donc me bloque :? .
Thx
Version imprimable
Je cherche des infos sur comment passer des paramètres d'un thread A (principale) a un thread B je n'ai pas encore commencé a coder mon applie car j'ai ce problème qui ce pose et donc me bloque :? .
Thx
Tu peux par exemple utiliser des queues comme Thread::Queue en procure. J'ai aussi vu un excellent module pour faire des communications complexes entre les threads récemment : Thread::Queue::Duplex. Mais si tes besoins sont basiques, tu peux te contenter de Thread::Queue qui fait partie de la distribution de Perl standard.
--
Jedaï
J'ai un petit soucie avec Thread::Queue je n'arrive pas a passer des objets du typeCode:my $objet = { clef => valeur };
voici mon code de teste
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 #!/usr/bin/perl -w use threads; use diagnostics; use Thread::Queue; use Data::Dumper; my $Dataqueue = Thread::Queue->new; my $thr = threads->new(sub { while ($element = $Dataqueue->dequeue) { my $d = Data::Dumper->new([$element], [qw(foo *ary)]); print $d->Dump; } }); test(); sub test { my @l = qw/ ah ai at /; foreach my $ii (@l) { $Dataqueue->enqueue($ii); } } test2(); sub test2 { my $bidon = { boulout => "ggrr" }; $Dataqueue->enqueue($bidon); } $thr->join;
perl me renvoie le message suivant du au passage de $bidon
merci de votre aideCitation:
Uncaught exception from user code:
Invalid value for shared scalar at H:/Program Files/Perl/lib/Thread/Queue.pm line 90.
at H:/Program Files/Perl/lib/Thread/Queue.pm line 90
Thread::Queue::enqueue('Thread::Queue=ARRAY(0x1fb22e0)', 'HASH(0x1f690d8)') called at C:\Documents and Settings\BlueCurve\Bureau\thread.pl line 31
main::test2() called at C:\Documents and Settings\BlueCurve\Bureau\thread.pl line 25
$foo = 'ah';
$foo = 'ai';
$foo = 'at';
A thread exited while 2 threads were running at C:\Documents and Settings\BlueCurve\Bureau\thread.pl line 4153.
j'ai trouvé la solition il suffit d'utiliser Storable :yaisse2:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 #!/usr/bin/perl -w use threads; use diagnostics; use Thread::Queue; use Thread::Semaphore; use Data::Dumper; use Storable (); my $Semaphore = Thread::Semaphore->new(0); my $Dataqueue = Thread::Queue->new; my $thr = threads->new(sub { my $element = {}; while ($element = Storable::thaw( $Dataqueue->dequeue) ) { my $d = Data::Dumper->new([$element], [qw(foo *ary)]); print $d->Dump; } }); test2(); sub test2 { my $bidon = { teste => "ggrr" }; $Dataqueue->enqueue( Storable::nfreeze($bidon) ); } $thr->join;