【问题标题】:How to suppress exception message box EIdConnClosedGracefully from thread in DataSnap如何从 DataSnap 中的线程中抑制异常消息框 EIdConnClosedGracefully
【发布时间】:2013-01-14 09:35:25
【问题描述】:

我正在尝试在 C++ Builder XE 中将 DataSnap 服务器构建为 Windows 窗体应用程序。我使用 TIdSchedulerOfThreadPool,如此处所述http://blog.marcocantu.com/blog/datasnap_deployment_performance.html。在有负载的情况下,我得到了很多 EIdConnClosedGracefully 异常,这可能是正常的,但问题是我从线程中得到了这个异常作为 MessageBoxes。我寻找一些可以抑制此消息框的事件。

【问题讨论】:

    标签: c++builder indy datasnap


    【解决方案1】:

    您是仅在调试器内运行应用程序时才看到消息框,还是在 IDE 外部运行应用程序时也看到消息框?调试器内部是正常行为,因为它们毕竟是异常。除非您告诉它忽略它们,否则调试器会显示引发异常的弹出消息。但是在 IDE 之外,您可以从工作线程中看到消息框的唯一方法是您自己的代码是否正在捕获异常并自己显示消息框,或者 DataSnap 在内部显示它们。 EIdConnClosedGracefully 是一个 Indy 异常,DataSnap 确实在内部使用 Indy,但 DataSnap 不太可能显示自己的消息框。 Indy 肯定不会显示消息框。

    【讨论】:

    【解决方案2】:

    我也在 IDE 之外看到了消息框。它来自 TWebRequestHandler (DataSnap)。这是显示该消息框的线程的堆栈跟踪:

    :7c90e514 ntdll.KiFastSystemCallRet
    :7e369418 user32.WaitMessage + 0xc
    :7e3749c4 ; C:\WINDOWS\system32\user32.dll
    :7e38a956 ; C:\WINDOWS\system32\user32.dll
    :7e38a2bc ; C:\WINDOWS\system32\user32.dll
    :7e3b63fd user32.MessageBoxTimeoutW + 0x7a
    :7e3a0853 user32.MessageBoxExW + 0x1b
    :7e3b6579 user32.MessageBoxW + 0x45
    :004D6BBD Sysutils::ShowException(ExceptObject=????, ExceptAddr=????)
    :0082b248 ; Webreq::TWebRequestHandler::HandleException
    :0082b06f ; Webreq::TWebRequestHandler::HandleRequest
    :0043dbdf ; Idhttpwebbrokerbridge::_16464
    :0043dd23 Idhttpwebbrokerbridge::TIdHTTPWebBrokerBridge::DoCommandGet + 0x23
    :0068AB4D Idcustomhttpserver::TIdCustomHTTPServer::DoExecute(Self=:00E9B9D0, AContext=:00F13660)
    :0063F09A Idcontext::TIdContext::Run(Self=????)
    :0049F9CD Classes::ThreadProc(Thread=:00ECA260)
    :004EF72E System::ThreadWrapper(Parameter=:00F1EF10)
    :7c80b729 ; C:\WINDOWS\system32\kernel32.dll
    

    【讨论】:

    • 那么这是TWebRequestHandler::HandleException() 中的一个错误,因为它不应该在工作线程内调用ShowException()。请file a bug reportEmbarcadero。
    猜你喜欢
    • 2011-03-20
    • 2017-04-29
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    • 2015-04-04
    相关资源
    最近更新 更多