1

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

4

2 回答 2

0

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

于 2013-01-15T03:41:23.267 回答
0

我也在 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
于 2013-01-23T14:31:18.653 回答