2011-12-07 9 views
1

私のアプリケーションでは、特定のdllは、使用操作の99.9%で発生しない特定の操作にのみ必要です。したがって、ロード時間とメモリを節約するため、これらは必要に応じてLoadLibraryを使用して動的にロードされます。ロードDLLブロックUIスレッド

ライブラリに応答しているユーザーに情報を提供し続けると、ライブラリーが正常なスレッドにロードされ、UIスレッドが使用可能になったときに通知され、プロセスを続行できます。

私の実験では、LoadLibraryが動作している間にUIスレッドがロックされ、イベントキューは処理されていないため、そのアプリケーションがロックされ、画面は再描画されなくなりました。

MSDNのLoadLibraryこの現象は、イベントキューがまだ処理されている間にDLLが1つのスレッドにロードされている可能性がありますか?

+2

の実行を提示していないがありますか? (つまり、デバッガを取り付けてポンピングしていない間にブレークされた場合はどうですか?) –

+0

良いアイデアはチェックすることを忘れた – JProgrammer

+0

これは不要な自己罰です。リンカの/ DELAYLOADオプションを使用します。 –

答えて

1

dllを非同期にロードする際に、Visual Studio Debuggerがシンボルサーバーから新しくロードされたdllのシンボルを検索することと関係していたことは問題ありません。

シンボルサーバーは、デバッガなしで無効になっているか、アプリケーションの実行されている、それはメッセージをポンプ停止時に何のロックがUIスレッドが何をしているのですLoadLibrary

Debugging Symbols

関連する問題