스레드를 생성하는 응용 프로그램이 있고 들어오는 연결을 수신 대기합니다. 그리고 주 스레드는 다른 일을 할 것입니다.부스트 스레드 - join()없이 스레드 만들기
boost::mutex mutex;
void
ThreadFunction(int port, int(*callbackFunc)(int, int))
{
mutex.lock();
std::cout << "Cannot get to this point" << std::endl;
mutex.unlock();
Application app;
app.run(port, callbackFunc);
}
void
Init(int port, int(*callbackFunc)(int, int))
{
std::cout << callbackFunc(1,1) << std::endl;
boost::thread t(boost::bind(&ThreadFunction, port, callbackFunc));
}
int
main(){
int port = 2340;
Init(port, *callbackfunction);
return 0;
}
오전 데 문제는 내가 스레드를 만든 후()에 가입 호출하는 경우, 그것은 잘 작동하지만 다음 응용 프로그램을 차단하고, 그러나 std::cout << "Cannot get to this point" << std::endl;
에 액세스하지 못할 것입니다.
스레드가 ThreadFunction을 호출하기 위해 수행해야하는 작업은 무엇입니까?
표준에 따르면'terminate()'는'std :: thread'가 파괴 될 때 호출 될 것이라고합니다. Boost의 구현은 대신'detach()'를 호출하지만 미래의 표준을 따르기 위해 바뀔 수 있으므로 그렇게 범위를 벗어나는 것은 좋은 생각이 아닙니다. –