0
매우 이상한 문제가 있습니다. 서버 클래스에서 t1.join()에 주석을 달면 HandleFunction의 소켓에서 아무것도 읽을 수 없습니다. 하지만 t1.join() 주석을 제거하면 잘 작동합니다. 하지만이 수신 기능을 영원히 실행하고 받아 들일 때마다 소켓을 처리 할 스레드를 만들어야합니다. 내가 거기에 합류하면 몇 가지 문제가 생길 것입니다. 어떻게 해결할 수 있습니까? 이 때 소켓에서 읽을 수없는 이유 void listen()
부스트 스레드 및 소켓
for(;;)
{
boost::asio::ip::tcp::socket socket(io_service);
socketPtr = &socket;
acceptor.accept(socket);
HandleClass objHandleClass;
boost::thread t1(boost::bind(&HandleClass::HandleFunction, &objHandleClass, boost::ref(socketptr)));
//t1.join();
}
귀하의 socket
객체 내부 루프에서 미리
class server
{
io_service;
acceptor;
void listen()
{
for(;;)
{
boost::asio::ip::tcp::socket socket(io_service);
socketPtr = &socket;
acceptor.accept(socket);
HandleClass objHandleClass;
boost::thread t1(boost::bind(&HandleClass::HandleFunction, &objHandleClass, boost::ref(socketptr)));
//t1.join();
}
}
}
int main()
{
server objServer;
objServer.listen();
}
class HandleClass
{
HandleFunction(socket* socketPtr)
{
//read from this socket;
}
}
샘 감사합니다. 이 문제가있는 것 같습니다. – cynric4sure
질문이 하나 더 있습니다. 이 루프에서 생성 된 새 소켓을이 루프 외부의 벡터에 넣으려면 어떻게해야합니까? 소켓은 복사 할 수 없으므로 벡터에 넣을 수 없습니다. 그리고 나는 객체가 파괴 될 것이고 포인터가 쓰레기를 가리킬 것이기 때문에 포인터를 벡터에 놓을 수 없다. – cynric4sure
@cynic 소켓 수명의 관용적 솔루션은'std :: shared_ptr'또는'boost :: shared_ptr '. –