【问题标题】:Exit Code -11 'Segmentation Fault' executing pthread_create退出代码 -11 'Segmentation Fault' 执行 pthread_create
【发布时间】:2013-02-04 12:35:41
【问题描述】:

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

};

头文件。

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

提前致谢,致以最诚挚的问候, 乔希

【问题讨论】:

  • 不使用QThread有什么特别的原因吗?
  • 我不知道 QThreads 存在。感谢您的提示,它们更易于使用。

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


【解决方案1】:

据我所知,您不能将类方法传递给 pthread。 考虑:thisthat。 您应该使用静态方法。

【讨论】:

  • 不客气 :) 我曾经也遇到过这个问题,我花了一些时间!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-25
  • 1970-01-01
  • 1970-01-01
  • 2019-04-14
  • 1970-01-01
  • 2013-04-29
  • 2011-07-17
相关资源
最近更新 更多