gpt4 book ai didi

c# - 激活线程 C#

转载 作者:太空狗 更新时间:2023-10-29 23:27:30 25 4
gpt4 key购买 nike

我在 C# 中有这段代码:

Thread t1 = new Thread(functionsActivations(3, 4000, 0, 4));
Thread t2 = new Thread(functionsActivations(3, 4000, 5, 9));
t1.start();
t2.Start();
Thread t3 = new Thread(functionsActivations(4, 4000, 0, 4));
Thread t4 = new Thread(functionsActivations(4, 4000, 5, 9));

它不起作用。我怎样才能告诉它调用我给它的方法呢?其次,我希望在 t1 和 t2 完成运行后激活 t3 和 t4。我怎样才能做到这一点?第三,我希望 t1 和 t2 不阻塞(这样 t2 就不必等到 t1 完成)。我做的对吗?

最佳答案

“它不起作用”并不是一组非常明确的症状。你在观察什么?

编辑:好的,既然您已经说明了编译器错误是什么,诊断就容易多了。您当前正在调用一个方法并尝试将结果用作线程执行的任务。假设您实际上想要在线程启动时调用该方法,您需要这样的东西:

C# 2:

Thread t1 = new Thread(delegate() { functionsActivations(3, 4000, 0, 4); });

C# 3:

Thread t1 = new Thread(() => functionsActivations(3, 4000, 0, 4));

在整个地方使用 lambda 表达式的替代方法是编写一个实用方法:

private static Action DeferFunctionActivations(int a, int b, int c, int d)
{
return () => functionsActivations(a, b, d, d);
}

然后你可以使用:

Thread t1 = new Thread(DeferFunctionActivations(3, 4000, 0, 4));

等等

对于本文的其余部分,我将假设使用 C# 3。

此外,t1.start() 应该是 t1.Start() - C# 区分大小写。

要回答你的最后一点,t1t2 目前是独立的——它们不会互相阻塞,除非你在它们的代码中的某处进行了同步正在运行。

如果您只想在 t1t2 完成时开始 t3t4,您可以使用Thread.Join:

Thread t1 = new Thread(() => functionsActivations(3, 4000, 0, 4));
Thread t2 = new Thread(() => functionsActivations(3, 4000, 5, 9));
t1.Start();
t2.Start();
t1.Join();
t2.Join();
Thread t3 = new Thread(() => functionsActivations(4, 4000, 0, 4));
Thread t4 = new Thread(() => functionsActivations(4, 4000, 5, 9));
t3.Start();
t4.Start();

请注意,这意味着 线程将等待直到 t1t2 也完成。如果这对您来说还不够好,那么有多种选择,但基本上您会想要其他东西来异步等待 t1 和 t2 完成。例如,您可以绑定(bind)一个额外的线程来执行此操作:

Thread t1 = new Thread(() => functionsActivations(3, 4000, 0, 4));
Thread t2 = new Thread(() => functionsActivations(3, 4000, 5, 9));
t1.Start();
t2.Start();
Thread t3 = new Thread(() => functionsActivations(4, 4000, 0, 4));
Thread t4 = new Thread(() => functionsActivations(4, 4000, 5, 9));
Thread t5 = new Thread(() =>
{
t1.Join();
t2.Join();
t3.Start();
t4.Start();
});
t5.Start();

有点恶心,但应该可以。

您可以使用 .NET 4.0 吗?如果是这样,Parallel Extensions 框架会大大简化这一切。

关于c# - 激活线程 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2251921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com