2014-09-17 4 views
0

최근에 채팅을 빌드하기 위해 boost :: thread (STL- 스레드로 시도 됨)를 사용하기 시작했습니다. 내가 가지고있는 클래스 내 "서버 역"에서 만든C++로 클래스 내에서 스레드를 생성합니다.

    에서 호출되는 스레드입니다 서버 청취를 시작 +
  1. 무효 기능을 결합 MAIN.CPP에서 전화를받을
  2. 무효 기능 함수는 내가 언급하기 전에

코드 : 난 '이'내가 유래에 읽을 수 있기 때문에 그 노를 추가 만들기 스레드 부분에서

this is ServerSocket.cpp file 

void ServerSocket::startHosting() 
{ 
    Bind(); 
    Listen(); 

    boost::thread clients_listener = boost::thread(&ServerSocket::clientsListener); 
} 

//This is the thread function 

void ServerSocket::clientsListener() 
{ 
    ..... handling incoming clients sockets , code goes here .... 
} 

정적 멤버 함수는 클래스를 나타내는 'this'멤버가 있어야합니다.하지만 'this'가 주어지지 않을 때 0 대신에 다른 오류가 있지만 이번에는 1을 더했습니다.

오류 C2064 - 용어 않습니다 1 개의 인수를 취하는 함수로 평가하지 않는다.

누군가이 문제를 해결하는 방법을 알고 나와 대답을 알려주시겠습니까? 나는 정적 기능을 수행 할 수 있지만 내가 해당 기능에 정적 필요한 모든 다른 회원을 만들기 위해 나를 필요로하고 내가 싶어하지 않는 다음 줄에

+0

boost :: thread (boost :: bind (& ServerSocket :: clientsListener, this));'(테스트되지는 않았지만 history가 가르쳐 준 것이 있다면 ...). 객체를 생성 할 때 그 객체로 무엇을 할 것인지를 확신하지 못하면'startHosting()'을 닫을 때 즉시 파괴해야합니다. – WhozCraig

+0

잘 작동하지 않았다 ... – IdoM

+0

당신은 이것을 시도했다 : boost :: thread clients_listener = boost :: thread (& ServerSocket :: clientsListener, this); 오류가 발생 했습니까? – sajas

답변

2

:

boost::thread clients_listener = boost::thread(&ServerSocket::clientsListener); 

멤버 함수 포인터를 전달하지만 포인터를 적용 할 개체가 없습니다.

boost::thread clients_listener = boost::thread(&ServerSocket::clientsListener, this); 

는 또한, 당신이 그렇게, 자바와 같은 줄에 두 번 유형을 철자 할 필요가 없습니다 :

boost::thread clients_listener(&ServerSocket::clientsListener, this); 

하면 충분할 것이다 당신은 아마 뭔가를 원한다.