(ConnectNamedPipe) を使用して NamedPipe 接続を待機し、次に (ReadFile) を読み取るスレッド (PipeThread) を持つクラス (NamedPipeManager) があります。これらは呼び出しをブロックしています (重複していません)。それらのブロックを解除します-たとえば、呼び出し元のクラスが NamedPipeManager を停止しようとした場合...
どうすれば中断できますか?Thread.abort を使用していますか? スレッド割り込み? これを処理する適切な方法はありますか?私の現在の状況を示す以下のコードを参照してください
main()
{
NamedPipeManager np = new NamedPipeManager();
... do stuff ...
... do stuff ...
np.Stop(); // at this point I want to stop waiting on a connection
}
class NamedPipeManager
{
private Thread PipeThread;
public NamedPipeManager
{
PipeThread = new Thread(new ThreadStart(ManagePipes));
PipeThread.IsBackground = true;
PipeThread.Name = "NamedPipe Manager";
PipeThread.Start();
}
private void ManagePipes()
{
handle = CreateNamedPipe(..., PIPE_WAIT, ...);
ConnectNamedPipe(handle, null); // this is the BLOCKING call waiting for client connection
ReadFile(....); // this is the BLOCKING call to readfile after a connection has been established
}
public void Stop()
{
/// This is where I need to do my magic
/// But somehow I need to stop PipeThread
PipeThread.abort(); //?? my gut tells me this is bad
}
};
では、関数 Stop() では、ConnectNamedPipe(...) または ReadFile(...) への呼び出しを適切にブロック解除するにはどうすればよいでしょうか?
どんな助けでも大歓迎です。ありがとう、