私はいくつかのスレッドを止めようとしていましたが、正常に行うための正しい方法についていくつかのことを読んでいましたが、単純にうまくいかないので何か間違っている必要があります。最初は、lock()
なしで、_IsRunning
が揮発性であり、ロックで試してみました。ここに私が持っているものがあります。与えられた時点でスレッドを停止する方法は?
private volatile bool _IsRunning;
private static readonly object runLock = new object();
public void Start()
{
if (_IsRunning == true)
return;
_IsRunning = true;
(new System.Threading.Thread(new System.Threading.ThreadStart(SendLoop))).Start();
}
public void Stop()
{
lock (runLock)
{
_IsRunning = false;
}
}
private void SendLoop()
{
while (_IsRunning)
{
lock (runLock)
{
if (_sockets.Count > 0)
{
//some stuff
}
else
{
System.Threading.Thread.Sleep(10);
}
}
}
}
私はwhile()
にブレークポイントを設定し、_IsRunnig
は私がStop()
に渡されていてもまだ本当です。
ありがとうございます!あなたのアンサーは私に本当のデッドロックの問題を認識させました!私の解決策では、ループ中にロックする必要がありますが、スリープは絶対に避けなければなりません! – Tipx