最近、ようやく別スレッドが機能するようになりました。今、私は同期をマスターしようとしています。
私の知る限り、スレッドを一時停止することThreadName.Suspend()
はお勧めできません。While
最初は、ループを使用してスレッドをブロックしました。後で、これがリソースを消費することに気付いたので、ループを に置き換えようとしていますAutoResetEvent
。
ここにいくつかのコードがあります(完全なコードかどうか教えてください):
private void combTester(object sender, EventArgs e)//happens in a timer, because it manipulates the GUI
{
if (!timer2Block)
{
//stuff happens
genBlock = false;//unblocks the thread
timer2Block = true;//blocks itself
//debugging stuff happens
}
if (done)
timer2.Enabled = false;
}
private void combGenerator(int currEl, int begVal)
{
//setting a variable
for (int c = begVal; c <= currEl + totalCells - maxCells; c++)
{
while (genBlock && !abortTime)
{
if (abortTime)
return;
}
genBlock = true;//blocks itself
//some recursive stuff happens,
//because of which I was forced to use a thread instead of timers
}
}
Wait()
メソッドとメソッドを別の場所に配置しようとしましたSet()
が、トレッドとタイマーの両方がブロックされ、プログラムをデバッグする方法がわかりません。
While
では、ループをに置き換えるにはどうすればよいAutoResetEvent
ですか?