2011-11-09 1 views
0

J'ai une classe qui est un Qt :: Object et a une méthode qui crée un thread.Perl Qt 3.1 et les threads

Chaque fois que j'essaie de détacher ou de joindre le fil, les erreurs se produisent.

Le signal d'émission ne fonctionne pas non plus.

Exemple de code est:

package MyThread; 

use threads; 

use Qt; 
use Qt::isa qw(Qt::Object); 
use Qt::signals 
imageResRecieved => ['int', 'int']; 

sub NEW 
{ 
    shift->SUPER::NEW(@_[0..2]); 
    if (name() eq "unnamed") { 
     setName("MyThread"); 
    } 
} 

sub getWidthHeight{ 
    my ($seq, $frameNum) = @_; 
    my ($width, $height) = (1920, 1080); 
    sleep(2); 
    print "Emitting\n"; 
    emit imageResRecieved($width, $height); 
    print "AFTER Emit\n"; 
} 


sub getImageWidthThread{ 
    my $thr = threads->create('getWidthHeight', @_); 

    $thr->detach(); # This causes seg faults 
} 

use MyThread; 
use Qt::slots 
    handleImageResSignal => ['int', 'int']; 

    my $mythread = MyThread(); 
    Qt::Object::connect($irt, SIGNAL "imageResRecieved(int, int)", this, SLOT "handleImageResSignal(int, int)"); 
    $mythread->getImageWidthThread("$GLOBAL{DIR}/$GLOBAL{PAT}", $seq_start); 

    sub handleImageResSignal{ 
     my ($width, $height) = @_; 
     print "\n Emitted ${width} ${height} \n"; 
} 

Les erreurs que je reçois sont comme:

tentative de libérer la chaîne Partagée inexistante '39631808', interpréteur Perl: 0x2879910.

[1] Segmentation fault

Répondre