
I have a code like this when execute the IdHTTPServDataEMVObj.Exequte(); it will throw a std::runtime_error if running one thread all is fine, the catch is excequted, but if running two threads then the application crash. What is the problem, have i miss something appreciate any help. huvcbo.. void server(boost::asio::io_service& io_service, short port) { tcp::acceptor a(io_service, tcp::endpoint(tcp::v4(), port)); for (;;) { socket_ptr sock(new tcp::socket(io_service)); a.accept(*sock); boost::thread t(boost::bind(socketclientEMVthread, sock, logFunc, mygetFunc, mybackFunc, statusUpdateFunc)); } } the client thread void socketclientEMVthread( socket_ptr sock) { cout << "connect on port " << sock->remote_endpoint().port() << endl; for (;;) { char data[max_length]; boost::system::error_code error; size_t length = sock->read_some(boost::asio::buffer(data), error); if (error == boost::asio::error::eof) break; // Connection closed cleanly by peer. else if (error) throw boost::system::system_error(error); // Some other error. std::string trans_in(data), trans_out; CIdHTTPServDataEMVObj IdHTTPServDataEMVObj(trans_in); try { // this is thrown IdHTTPServDataEMVObj.Exequte(); if ( IdHTTPServDataEMVObj.txBufferlen > 0 && IdHTTPServDataEMVObj.txBufferlen != std::string::npos) { trans_out = IdHTTPServDataEMVObj.txBuffer; } else { trans_out = trans_in; } } catch(trans_error &te) { trans_out = te.what(); boost::asio::write(*sock, boost::asio::buffer(trans_out, trans_out.size())); break; } boost::asio::write(*sock, boost::asio::buffer(trans_out, trans_out.size())); break; } }