停止并用新线程替换正在运行的线程
本文关键字:线程 替换 运行 新线程 | 更新日期: 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,通常,您可以稍后重新启动它(或其他(