2012-02-23 1 views
1

나는 Runnable 클래스를 가지고있다. 내가 컨트롤러 클래스의 Runnable에서 파생 된이boost :: thread segmentation fault

 start() 
     { 
      status_ = RUNNING; 
      mythread_ = boost::thread(boost::ref(*this)); // Line 2 
     } 

: 어떤에서, 다음과 같은 기능을 나는 새 스레드를 시작하는 데 사용합니다. 와 나는 내가 사용

시작 기능을

그래서 시작() 함수를 사용하여 컨트롤러에 대한 스레드를 만들 컨트롤러에서 원하는 :

controller_->start() 

는 새로운 스레드를 생성;

하지만 결국 선 2.

에서 잘못 됐을 수 있었던 어떤 생각을 오류를 치화지도하는?

+0

'controller_'가 유효한 객체이고 클래스에'operator()()'가 있다고 가정하고 실제 코드에 누락 된 반환 유형과 세미콜론이 포함되어 있다면 게시 한 코드에 아무 문제가 없습니다. –

+0

좋은 기회가 컨트롤러 _ 유효한 포인터가 아닙니다 – pezcode

답변

0

때때로 컴파일러에 스레드 라이브러리를 지정하지 않으면 segfault가 발생하는 것을 기억합니다. 유닉스를 사용하는 경우 컴파일러에 -pthread 인수를 추가하십시오. 최신 linux/boost/gcc에서는 더 이상 필요하지 않다고 생각됩니다.

+0

감사합니다 kynnysmatto, 나는 pthread를 포함 시켰습니다. 나는이 문제를 제대로 해결할 수 없다고 생각합니다. 시작 메서드에서 컨트롤러 클래스의 "this"참조를 어떻게 사용할 수 있습니까 ?? – user1228352

+0

잘 모르겠습니다. 적어도 내 컴퓨터에서 작동합니다. [http://pastebin.com/LtfCnrBK](http://pastebin.com/LtfCnrBK) – kynnysmatto

+0

감사합니다. 잘못된 파일이 "boost/thread/thread.hpp"에 포함되었지만 "boost/thread.hpp"여야합니다. – user1228352

0

개체의 주소는 this 포인터와 같은 멤버 함수 내에서만 사용할 수 있으며 this의 대부분의 용도는 암시 적입니다.

또는 start() 함수 인 friend을 클래스의 새 스레드에 직접 보낼 수 있습니다.