C++ Builder XE で Windows フォーム アプリケーションとして DataSnap サーバーを構築しようとしています。ここで説明されているように、TIdSchedulerOfThreadPool を使用しますhttp://blog.marcocantu.com/blog/datasnap_deployment_performance.html。負荷がかかると、多くの EIdConnClosedGracefully 例外が発生しますが、これはおそらく正常ですが、問題は、この例外をスレッドから MessageBoxes として取得することです。このメッセージボックスを抑制できるイベントを探します。
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
Are you seeing the messageboxes appear only while running your app inside of the debugger, or do you see them while running the app outside of the IDE as well? Inside the debugger is normal behavior, since they are exceptions afterall. The debugger shows popup messages for raised exceptions unless you tell it to ignore them. But outside of the IDE, the only way you can be seeing messagebox from worker threads is if either your own code is catching the exceptions and displaying the messageboxes yourself, or else DataSnap is showing them internally. EIdConnClosedGracefully is an Indy exception, and DataSnap does use Indy internally, but it is very unlikely that DataSnap would be displaying its own messageboxes. Indy certainly does not ever display a messagebox.