【问题标题】:How to Fix the exception received from poco library?如何修复从 poco 库收到的异常?
【发布时间】:2019-11-04 15:34:19
【问题描述】:

当客户端在 SenderThread 上创建一个即时。它可以相互发送数据。 但是当客户端进入挂起模式并从挂起中返回时。最后创建的线程出现异常 恢复。并且没有发送任何数据。

收到异常详情:

displayText = 异常

消息 =

名称 = 例外

类名 = N4Poco9ExceptionE

代码如下:

class SenderThread: public Poco::Runnable
{
public:
    MyThread(const std::string& msg):
        Msg(msg);
    {
    }

    void run()
    {
        try {
        SendData(msg);
       } catch(Exception exp) {
           std::cout<<"displayText = "<<e.displayText()<<std::endl;
           std::cout<<"message = "<<e.message()<<std::endl;
           std::cout<<"name = "<<e.name()<<std::endl;
           std::cout<<"className = "<<e.className()<<std::endl;
  
        }

    }

private:
    std::string Msg;
    
};

如何获得有关异常的更多详细信息以及如何处理此异常?

Günter Obiltschnig评论后编辑:

我能够捕捉到正确的异常。

 displayText = Invalid argument 
 name = Invalid argument 

有时我看到套接字关闭异常。当系统进入挂起模式时,系统(os)将关闭所有套接字。现在在恢复应用程序尝试再次打开套接字时,它会在 Poco::Net::Socket::Socket(Poco::Net::Socket const&) 中抛出错误。请对此有任何帮助

【问题讨论】:

    标签: c++ multithreading c++11 exception poco-libraries


    【解决方案1】:

    您必须通过 (const) 引用来捕获异常,以便从中获取有用的信息。

    catch (const Poco::Exception& exc)
    {
        std::cerr << exc.displayText() << std::endl;
    }
    

    【讨论】:

    • 我能够捕捉到正确的异常。 displayText = 无效参数名称 = 无效参数,有时我看到套接字关闭异常。当系统进入挂起模式后,所有套接字都被系统关闭。现在在恢复应用程序尝试再次打开套接字时,它会在 Poco::Net::Socket::Socket(Poco::Net::Socket const&) 中抛出错误。请对此有任何帮助
    • 我的代码在挂起后重新连接时崩溃@Günter Obiltschnig Process 909343 terminate SIGSEGV code=1 fltno=11 libpos.so@_ZN4Poco3Net6SocketC1ERKS1_+0x0000000000000018) mapaddr=000000000023d8
    猜你喜欢
    • 1970-01-01
    • 2012-05-29
    • 2012-10-19
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    相关资源
    最近更新 更多