2016-04-01 35 views
0

スレッドの一時停止と再開に関する作業ロジックを習得したい。マルチスレッドの一時停止と再開

Thread th=new Thread(start); 
th.Start(); 

public void start() 
{ 
    command_1; 
    command_2; 
    command_3; 

    if(variable_condition) 
     goto Pause; 

    command_4; 
    command_5; 
    command_6; 
    command_7; 

    Pause: 
     pause(); 
} 

private void pause() 
{ 
    th.Suspend(); 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    th.Resume(); 
} 

今、スレッドを開始するコマンドが続行されると、

command_1またはcommand_4?

+0

[少し読んで](https://msdn.microsoft.com/en-us/library/tttdef8x(v = vs.110).aspx) : "Thread.SuspendとThread.Resume ...しかし、これらのメソッドの使用はお勧めできません。Thread.SuspendメソッドとThread.Resumeメソッドは一般的にアプリケーションには便利ではありません。同期メカニズムと混同しないでください。" - だから、なぜあなたはそれらを学んでいるのですか? –

+0

私はマルチスレッドについては良くないので。そして私はこの一時停止と再開の方法だけを知っています。そのようなメソッドの場合は、これらのメソッドについて私にリンクを与えることができます。 私は感謝します –

+0

'Suspend'と' Resume'の使用を知らせずに、mutex、クリティカルセクション、ロック、セマフォなどの同期オブジェクトについて読んでください。 –

答えて

1

Resumeのコードは、開始関数の実行がすでにラベルPauseにあるため、何も行いません。だから、あなたは最後に再開しています。機能は単に再開時に終了します。

あなたは

if(variable_condition) 
    pause(); 

if(variable_condition) 
    goto Pause; 

を変更し、符号化要求GOTOの神々を使用する場合は、代わりにラベルPause

を削除し、その後、command_4から再開したい場合は、次の

Thread th=new Thread(start); 
th.Start(); 

public void start() 
{ 
    command_1; 
    command_2; 
    command_3; 

    if(variable_condition) 
     goto Pause; 

    Pause: 
     pause(); 

    command_4; 
    command_5; 
    command_6; 
    command_7; 
} 

private void pause() 
{ 
    th.Suspend(); 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    th.Resume(); 
} 

非常にばかだが...

+0

まずはあなたの答えに感謝します。しかし、私はこの行を "goto"コマンドで使う必要があります。 –

+0

GOTOを楽しもう。 GOTOで追加された答え。 –

+0

plsは私の答えを次のように見える –

関連する問題