2013-02-04 36 views
0

我試圖通過使用單個參數執行pthread_create來創建新線程。退出代碼-11'Segmentation Fault'正在執行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

+0

是否有任何特別的原因不使用QThread? –

+1

我不知道QThreads存在。感謝提示,它們更容易使用。 – Josch

回答

0

至於我記得,你不能傳遞類的方法到並行線程。 考慮:thisthat。 你應該使用靜態方法。

+0

這些是有用的線程,非常感謝你:-)。 – Josch

+0

不客氣:)我曾經有過這個問題,並且花了我一些時間! –