2012-05-03 13 views
0
for (APCounter = start; APCounter < Stager.InstructionsMemory.Length; APCounter++) 
{ 
    PipelineInitializor(); 
    int i1 = APCounter; 
    int i = APCounter; 
    tasks[i] = new BlockingCollection<Func<object>>(); 
    tasks[i].Add(() => Fetch(i1)); 
    tasks[i].Add(() => Decode(i1)); 
    tasks[i].Add(() => ALURes(i1)); 
    tasks[i].Add(() => Memory(i1)); 
    tasks[i].Add(() => WriteB(i1)); 
    InstructionThread[i] = new Thread(() => Worker(i1, tasks[i1])); 
    InstructionThread[i1].Start(); 
} 

これらは、同じ種類のデータオブジェクトを運ぶが新しいタスクデータを持つ新しいスレッドに置き換える必要があるスレッドのカップルです。実行中のスレッドを新しいスレッドで停止および置換する

Abortメソッド(これはお勧めしません)を使用しようとしましたが、すべてが実行を停止させました。何を呼び出す関数でも、何も実行を再開しません。

+0

なぜ「i」と「i1」ですか?なぜ私は両方のための '私はなぜですか? –

+0

さて、私は両方のためにそれを使用します。 Ty。 – user1364852

答えて

1

私は、あなたがタスク並列ライブラリとTaskクラスを使用することをお勧めし

bool run = true; 
Thread thread = new Thread(method); 
thread.start(); 

private void method() 
{ 
    while(run) 
    { 

    } 
} 

スレッドを停止するには、単にfalseにブール値を設定すると、通常、後でそれを再起動することができます(または他の) キャンセルの可能性があります。

スレッドの「置き換え」は意味をなさない。新しいスレッドを開始して同じデータを処理することができます。他のスレッドが停止する方法がない場合は、確実に停止することはできません。

0

あなたが言うように、メソッドabort()はお勧めできません。無限ループの場合は、ブール値を使用して中断なしでスレッドを停止します。

関連する問題