0

Qt::Object であり、スレッドを作成するメソッドを持つクラスがあります。

スレッドを切断または結合しようとすると、セグメント障害が発生します。

また、放出信号が機能していません。

サンプルコードは次のとおりです。

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";
}

私が得るエラーは次のようなものです:

存在しない共有文字列 '39631808' を解放しようとしています。Perl インタープリター: 0x2879910。

[1] セグメンテーション違反

4

1 に答える 1

0

QThreadを使用してみてください...残念ながらディストリビューションには例がありません。それまでの間、QThreadをリクエストしてください。それまでの間、 http: //www.pyside.org/docs/pyside/PySide/QtCore/QThread.htmlを適応させてみてください。

于 2011-11-11T04:56:55.873 に答える