2

プロトコル ライブラリを実装しています。ここでは簡単に説明します。

メイン関数内のメイン スレッドは、(tcpclient 内の) ネットワーク ストリーム上でデータが利用可能かどうかを常にチェックします。response が受信したメッセージで、thread が実行中のスレッドであるとします。

thread = new Thread(new ThreadStart(function));
thread.IsBackground = true;
thread.Start();

while(true){

response = receiveMessage();

if (response != null)
     {                
      thread.Suspend();
      //I am searching for an alternative for the line above and not thread.Abort().

      thread2 = new Thread(new ThreadStart(function2));
      thread2.IsBackground = true;
      thread2.Start();         
     }
}

これまでのところ、while ループ内にはさらに多くのメッセージが送られ、さまざまな種類の着信メッセージを処理するためのステートマシンもありますが、これで十分なはずです。(関数 "function" と "function2" だけではありません)。

とにかく、プロトコルはプログラマーから隠され、ライブラリであることを意図しているため、このアプリケーションでは関数の内部がどのように見えるかは明確ではありません。これは、プログラムがプロトコルのどの状態にあるかに応じて、プロトコルがいくつかのプログラマ定義関数をスレッドとして開始することを意味します。

したがって、特別な応答 (callAnotherFunction メッセージなど) を受信した場合、スレッド (ここでは「スレッド」という名前) を突然終了させたいと考えています。しかし、ループ内で実行されるかループ外で実行されるか、および終了するまでにどれだけの処理が必要かはわかりません。

非推奨の Suspend または Exceptionthrowing Abort 関数を使用せずにこれらのスレッドを停止するにはどうすればよいですか? (関数のプログラマーに ThreadAbortException のキャッチを強制することはできないことに注意してください。)

それとも、別のプログラム アーキテクチャが必要ですか? (ところで、いつでもメッセージが表示される可能性があるため、ネットワークストリームをメイン関数にポーリングするために receiveMessage 内にループを配置することにしました)。

4

4 に答える 4