2012-05-03 150 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

我會建議你使用任務並行庫和工作類,它有能力取消 。

「替換」一個線程沒有任何意義。您可以啓動一個新線程來處理相同的數據;但是,如果您無法讓其他線程自行停止,則無法可靠地停止它。

0

正如您所說,不建議使用abort()方法。如果它是一個無限循環,則用於在沒有墮胎的情況下停止線程的布爾值。

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

private void method() 
{ 
    while(run) 
    { 

    } 
} 

停止線程,只需設置布爾值false,並通常情況下,你可以重新啓動它(或其他)