【发布时间】: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