I dont get any response on this so i will ask again
 
i start a new thread,
the thread instance class Foo,
Foo foo;
try {
    foo.exequte();
    //foo.execute throw a std::exception
}
catch(std::exception) {
 
}
if start one thread i catch the std::exception,
 
but if i run several threads the app crash.
i start the thread like this
boost::thread t(boost::bind(newthread));
 
 
appreciate any help.
//Christer
"Christer Borgqvist" <christer.borgqvist10@bredband.net> skrev i meddelandet news:000001cc8ef1$fac46820$c500a8c0@christer618c56...

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;
        }
}


_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users