번역

2014-04-24 3 views
-3

당신은 나를 pthread와 라이브러리 부스트 라이브러리에서 다음과 같은 방법을 번역에 도움을 주시겠습니까 :번역

pthread_t tid; // I guess this should become : boost::thread tid; 
//... some instructions ... 

pthread_create(&tid, NULL, (void*(*)(void*))process_request, (void*)some_ptr); 

void *process_request(void *soap) 
{ 
    pthread_detach(pthread_self()); 
    //... some instructions ... 
    return NULL; 
} 

당신에게 많이 감사합니다!

boost::thread(&process_request, some_ptr).detach(); 

당신은 std에 의해 boost을 대체 할 수 있으며, 프로그램은 11 C++로 휴대가 :

+0

요정과 유니콘을 요구하고 있습니다! 번역 할 방법이 없습니다. 완전히 다른 API입니다! –

+0

이 질문은 불경 한 것을 요구하기 때문에 주제와는 거리가 먼 것처럼 보입니다. –

+3

@ πάνταῥε OP OP가 자신이 한 일을 보여주지 못하거나, Boost Thread가 효과적으로 C++ 11의 앞 그림자라고 인식하지 못합니까? ? – sehe

답변

3

그것은 단순히이다.

process_request은 실제로 강력한 형식의 매개 변수를 사용할 수 있습니다. 당신은 (실제로, 또는 std::ref), 참조를 전달 boost::ref을 사용하려면 :

void process_request(MyData& data) 
{ 
} 

MyData data; 
boost::thread th(&process_request, boost::ref(data)); 
th.join(); 

은 C++ (11)의 패턴의 비트 때문에, 스레드 함수에 이동 데이터에 불구하고,의 전달되는 매개 변수에 경주를 피하려면 다음과 같이하십시오.

void process_request(MyData&& data) 
{ 
} 

MyData data; 
boost::thread th(&process_request, std::move(data)); 
th.join(); 
+0

안녕하세요! 우선 답에 감사드립니다. +1. 글쎄, 난 아직도 몇 가지 혼란이 여기있다 : ** process_request ** 정의 안에 ** detach() ** 메서드를 호출하는 방법? 또한, & process_request를 설정하기 위해 생성자를 사용하는 대신 ... 할당 할 수있는 방법이 있습니까? 나는 ** 어딘가에 ** 선언해야하기 때문에. 정말 고마워! – Farah

+2

물론, 선언과 할당이 분리되어 있고 thread 함수 내부에서 detach를 사용하는 경우 : ** [Live On Coliru] (http://coliru.stacked-crooked.com/a/8839110cccccb432) **. 면책 조항 : 나는 두 가지 모두 나쁜 생각이라고 생각합니다. thread_group을 사용하고 join> detach. – sehe

+1

완벽한! 나는 너에게 도움이되는 대답을 구별하기 위해 내일 너에게 현상금을 줄거야! – Farah