停止&用新线程替换正在运行的线程

时间:2012-05-03 21:57:24

标签: c# multithreading

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

2 个答案:

答案 0 :(得分:1)

我建议您使用Task Parallel Library和Task类,它具有的功能 消除。

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

答案 1 :(得分:0)

正如您所说,不建议使用方法abort()。如果它是一个无限循环,那么一个布尔值用于在没有堕胎的情况下停止线程。

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

private void method()
{
  while(run)
  {

  }
}

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