2017-05-18 8 views
0

현재 복수 클라이언트를 처리하기 위해 select()을 사용하는 다중 클라이언트 서버에서 작업하고 있습니다. 그러나 클라이언트가 과중한 계산이 필요한 메시지를 보내면 내 서버가 클라이언트의 다른 메시지에 응답 할 수 있도록 pthread_create()을 사용하여 새 스레드를 만들어야합니다. 해당 클라이언트에 대한 계산이 완료되면 클라이언트에게 메시지를 반환 할 수 있어야합니다. 하지만 그 스레드가 끝나고 최종 결과를 얻는 방법을 알 수있는 방법을 모르겠습니다. 분명히 그 새 스레드를 실행하는 동안 내 서버 프로그램을 차단으로 사용 pthread_join()을 사용할 수 없습니다. C가 그 자식 스레드의 최종 결과를 얻는 데 사용할 수있는 함수를 제공합니까? 글로벌 변수 사용을 피하고 싶습니다.C - pthread를 사용하고 반환 값을 기다리는 중

+1

'그렇다면 C는 그 자식 스레드의 최종 결과를 얻는 데 사용할 수있는 함수를 제공합니까?' 예, select(). – ThingyWotsit

+0

또는 스레드에게 관련 fd를 전달하고 직접 응답하도록하십시오. – ThingyWotsit

+0

@ThingyWotsit 나는 select()가 파일 기술자에서만 작동한다고 생각했다. –

답변

1

스레드 (비 차단 될 것이다) 메인 스레드에서 합류하기 전에 완료 경우 그냥 확인하실 수 있습니다

당신이해야 여기에서 작업을 수행하는 방법을 얻을 : How do you query a pthread to see if it is still running?

그렇지 않으면 당신은 아마 수 자식 스레드에서 응답을 다시 보내면 연결 정보를 스레드 함수의 매개 변수로 전달할 수 있습니다.

1

처리를 마친 select()에서 대기중인 스레드를 자식 스레드가 깨우도록하려면 pipe()을 사용하여 파이프를 만들 수 있습니다. select()을 호출하는 스레드는 파이프의 읽기 측을 파일 설명자 세트에 추가하고 하위 스레드는 작업을 마칠 때 파이프의 쓰기 측에 씁니다.

결과가 너무 크지 않은 경우 파이프를 통해 결과를 보낼 수도 있습니다.