退出代码-11'分段错误'执行pthread_create

时间:2013-02-04 12:35:41

标签: qt pthreads segmentation-fault argument-passing ros

我正在尝试通过使用单个参数执行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;

};

头文件。

错误来自何处? 线程方法的声明是否正确?

提前致谢,最诚挚的问候, Josch

1 个答案:

答案 0 :(得分:0)

据我记忆,你不能将类方法传递给pthreads。 请考虑:thisthat。 你应该使用静态方法。