исключение, когда поток выдает ошибку в Windows Scoket C ++ - PullRequest
0 голосов
/ 08 сентября 2011

Я создаю клиент-серверное приложение в Windows, используя сокет, и я хочу вызвать исключение во время выполнения из потока, если возникнут какие-либо проблемы, но я получаю ошибку для оператора throw

    //create thread in cpp file
    CreateThread(NULL,0,startServer,this,0,NULL);

        //thread in header file
            static unsigned long __stdcall startServer(void *i_SocketTransportServer)
           {
                           ((SocketTransportServer*)i_SocketTransportServer)->StartServerThread(((SocketTransportServer *)i_SocketTransportServer)->m_socketServer);
                return 0;
           }

        //and StartServerThread is function called by thread
         // SocketTransportServer is inner class of  RMLThinTransport
            void RMLThinTransport::SocketTransportServer::StartServerThread(SOCKET i_socketServer)
            {
                m_socketAccept=NULL;
                while(true)
                {
                    Sleep(20);
                    if(m_canAcceptMore)
                    {
                        m_canAcceptMore=false;
                        if(!m_isRunning)
                        {
                                break;
                        }
                        try
                        {
                            m_socketAccept=accept(m_socketServer,NULL,NULL);
                            if(m_socketAccept==INVALID_SOCKET)
                            {
                                int lastError=WSAGetLastError();
                                closesocket(m_socketAccept);
                                                                                                                            SocketExceptions                                        
 exceptionInAcceptAtServer;
                                  exceptionInAcceptAtServer.detectErrorAccept(&lastError);

throw exceptionInAcceptAtServer;
                            }
                            else
                            {
                                //_LOG("Client connected",EventTypeInfo) ;
                                OutputDebugStringW(L"client connected.....");
                                /* If client connected then setClinetCout value 1 */
                                setClientCount(1);
                                m_ClientSockets.push_back(m_socketAccept);
                                CreateThread(NULL,0,receiveDataAtServer,this,0,NULL);
                            }

                        }
                        catch(SocketExceptions& i_exceptionInAcceptAtServer)
                        {   

                            /*OutputDebugStringW(L"Can't accept client In Exception. ."); */
    throw i_exceptionInAcceptAtServer;//getting runtime error from here

                        }
                    }

                }

            }

Теперь я хочу выдать ошибку при закрытии сервера, но получаю ошибку времени выполнения.так есть ли способ, чтобы я мог получить ошибку в моей основной функции. Извините, но я новичок в C ++, поэтому, пожалуйста, помогите мне.и ошибка

enter image description here

1 Ответ

0 голосов
/ 08 сентября 2011

Код, который выдает , исключение не является проблемой;это отсутствие какого-либо кода для перехвата исключения, в этом проблема.Приложение закрывается, потому что ничто не перехватывает исключение, которое вы выдаваете;Вы должны убедиться, что что-то собирается поймать это.Ваш startServer метод - процедура потока - должен перехватить исключение и аккуратно выйти из потока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...