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

本文关键字:线程 替换 运行 新线程 | 更新日期: 2023-09-27 18:33:02

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

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

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

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

正如您所说,不建议使用中止 (( 方法。如果它是一个无限循环,则使用布尔值来停止线程而不进行堕胎。

bool run = true;
Thread thread = new Thread(method);
thread.start();
private void method()
{
  while(run)
  {
  }
}

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