0

単一の引数でpthread_createを実行して、新しいスレッドを作成しようとしています。

void P2FPanel::startRecording()
{
  qDebug() << "Start recording...";
  qDebug() << "_bag_list: " << _bag_list->size();
  pthread_create(&_playBags_t, NULL, playBags, _bag_list);
  qDebug() << ".... Started";
}

このメソッドはボタンによってトリガーされ、pthreadを作成します。ここで、コードはすでにエラー-11で終了しています(セグメンテーション違反だと思います)。デバッグ行は、_bag_listが空ではないことを示しています。

void* P2FPanel::*playBags(void* arg0)
{
  qDebug() << "Play Bags from _bag_list...";
  QList<BagRef*> *bag_list = (QList<BagRef*>*) arg0;
  qDebug() << "Play " << QString("%1").arg(bag_list->size()) << " Bags";
  //Do stuff
  qDebug() << "Finished playing";
  return 0;
}

このメソッドは新しいスレッドで実行する必要があります。

class P2FPanel: public rviz::Panel
{

  private Q_SLOTS:
    void startRecording();

  private:
    QList<BagRef*> *_bag_list;
    void* (*playBags)(void* arg0);
    pthread_t _playBags_t;

};

ヘッダーファイル。

エラーはどこから来ていますか?スレッドメソッドの宣言は正しいですか?

よろしくお願いします、ジョシュ

4

1 に答える 1

0

私が覚えている限りでは、クラスメソッドを pthread に渡すことはできません。考えてみましょう:これあれ. 静的メソッドを使用する必要があります。

于 2013-02-04T12:55:31.353 に答える