2013-02-04 3 views
0

단일 인수로 pthread_create를 실행하여 새 스레드를 만들려고합니다.종료 코드 -11 '분할 오류'실행 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

, 당신의 pthreads로 클래스 메소드를 전달할 수 없습니다. 고려 : thisthat. 정적 메서드를 사용해야합니다.

+0

이것들은 유용한 스레드입니다. 매우 감사드립니다 :-). – Josch

+0

당신은 환영합니다. 나는 한번도이 문제를 가지고 있었고, 그것은 나에게 어느 정도 시간이 걸렸습니다! –