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方法(不推荐),它导致一切停止执行,无论我调用什么函数,都没有再次开始执行。

4

2 回答 2

1

我建议您使用任务并行库和任务类,它具有取消功能。

“替换”线程没有任何意义。您可以启动一个新线程来处理相同的数据;但是,如果您无法让其他线程自行停止,您就无法可靠地停止它。

于 2012-05-03T22:06:50.597 回答
0

如您所说,不推荐使用方法 abort() 。如果它是一个无限循环,则使用一个布尔值来停止线程而不中止。

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

private void method()
{
  while(run)
  {

  }
}

要停止线程,只需将布尔值设置为 false,通常,您可以稍后(或其他)重新启动它

于 2012-05-03T22:01:04.010 回答