4

私は実行時にいくつかのアセンブリをロードするプロジェクトを行っています。それらのアセンブリごとに、リフレクションを使用して特定のクラスを見つけ、それらをインスタンス化し、それらのメソッドを呼び出します。これはすべて正常に機能していますが、一部の呼び出しでは、プロセスでスタックオーバーフローが発生し、プログラム全体が終了します。ロードしているアセンブリのソースコードを制御できないため、実行しているコードを変更できません。

私が問題を解決しようとしたこと:

  1. メソッドの呼び出しを行うスレッドを割り当て、
    timeintervallの後でスレッドを中止しようとしました(これは悪い習慣であることはわかっていますが、コードを変更してフレンドリーに終了することはできません)。ただし、これは機能しません。スレッドは、中止呼び出しを処理するために「スタックオーバーフロー」でビジー状態になっていると思います。

  2. スレッドがアクセスできる実際のメモリを減らしてみましたが、stackoverflow-exceptionをキャッチできないため、これは解決策ではありません。プログラムはとにかく終了します(より速く)

質問:

  1. スレッドがビジー状態になって中止される可能性はありますか?この動作をしているスレッドを中止する方法はありますか?
  2. どうすれば(制御できない)コードを適切に呼び出すことができますか?

前もって感謝します!

4

1 に答える 1

6

「不透明なコード」の場合に推奨される手順は、実際に新しいプロセスをフォークして開始することです。そうすれば、2つのメリットが得られます。

  1. それ自体が失敗した場合、それは分離され、メインアプリケーションも停止しません。
  2. あなたはそれを安全に殺すことができ、それは中止されたスレッドほど多くの問題を引き起こしません。
于 2012-04-24T17:25:50.740 に答える