有一段时间我在我的程序中使用了线程,但我从不使用join()。我得到了一些关于join()的内容,如下面的
Join will stop the current running thread and let the "Join" thread runs until it finishes.
static void Main()
{
Thread t = new Thread (Go);
t.Start();
t.Join();
Console.WriteLine ("Thread t has ended!");
}
static void Go()
{
for (int i = 0; i < 10; i++) Console.Write ("y");
}
从上面的代码我只是不明白join()在这里扮演什么样的重要角色。请讨论加入使用情况。
如果可能的话,给我一个小的真实的join()代码,因此我可以理解join()的好用。
还指导我join()可以在多线程环境中使用。感谢
答案 0 :(得分:3)
使用您发布的代码作为示例,如果它是这样写的:
static void Main()
{
Thread t = new Thread (Go);
t.Start();
Console.WriteLine ("Thread t has ended!");
}
static void Go()
{
for (int i = 0; i < 10; i++) Console.Write ("y");
}
你的输出将是:
YYY 线程t已经结束了!yyyyyyy
表示Go()
与Console.WriteLine ("Thread t has ended!");
通过添加t.join(),您可以等到线程完成后再继续。如果您只希望代码的一部分与线程同时运行,这非常有用。
答案 1 :(得分:2)
阻止调用线程直到线程终止。
注意:您还可以阻塞调用线程,直到线程终止或指定的时间过去,同时继续运行标准COM和SendMessage抽取。 支持。 NET Compact Framework。
link:http://msdn.microsoft.com/fr-fr/library/system.threading.thread.join(v=vs.80).aspx
答案 2 :(得分:2)
考虑一些游戏示例。
static void Main()
{
Thread t = new Thread (LoadMenu);
t.Start();
Showadvertisement();
t.Join();
ShowMenu();
}
static void LoadMenu()
{
//loads menu from disk, unzip textures, online update check.
}
static void Showadvertisement()
{
//Show the big nvidia/your company logo fro 5 seconds
}
static void ShowMenu()
{
//everithing is already loaded.
}
关键是你可以在两个线程中做多个事情,但是有一点你应该同步它们并确保一切都已经完成
答案 3 :(得分:2)
如果从代码应用程序中删除t.Join(),它将在您确定执行Go()方法之前结束执行。
如果你有2个或更多的方法可以同时执行但是所有方法都需要完成,那么在你可以执行依赖于它们的方法之前,
Join非常有用。
请看下面的代码:
static void Main(string[] args)
{
Thread t1 = new Thread(Method1);
Thread t2 = new Thread(Method2);
t1.Start();
t2.Start();
Console.WriteLine("Both methods are executed independently now");
t1.Join(); // wait for thread 1 to complete
t2.Join(); // wait for thread 2 to complete
Console.WriteLine("both methods have completed");
Method3(); // using results from thread 1 and thread 2 we can execute method3 that can use results from Method1 and Method2
}
答案 4 :(得分:0)
.Join()调用等待,直到线程结束。我的意思是当你的Go方法返回时,这个调用会返回。