PDA

View Full Version : سوال: متد Join در ترد



irpersian20
یک شنبه 25 فروردین 1392, 15:27 عصر
سلام
مگر وقتی یک ترد join میشه. تا وقتی که ترد کارش تمام نشده به خط بعدی نمیورد درسته؟
در مثال زیر t1.join() شده است.پس باید اول این چاپ بشه
Console.WriteLine("t1 is ending.");
اما این برعکس هست. اول t2 اجرا میشه که

using System; using System.Threading; class Example { static void Main() { Thread t1 = new Thread(() => { Thread.Sleep(4000); Console.WriteLine("t1 is ending."); }); t1.Start(); Thread t2 = new Thread(() => { Thread.Sleep(1000); Console.WriteLine("t2 is ending."); }); t2.Start(); t1.Join(); Console.WriteLine("t1.Join() returned."); t2.Join(); Console.WriteLine("t2.Join() returned."); } } /* This example produces the following output: t2 is ending. t1 is ending. t1.Join() returned. t2.Join() returned. */

Alfred188
یک شنبه 25 فروردین 1392, 17:35 عصر
سلام،
فکر می کنم باید قبل از اینکه thread دیگه ای رو شروع کنید thread قبلی رو join کنید تا بهش بفهمونید باید منتظر بشه تا کارش تموم بشه:
من باشم اینطوری می نویسمش:
static void Main(string[] args)
{
Thread t1 = new Thread(() => {
Thread.Sleep(4000);
Console.WriteLine("t1 is ending.");
});
t1.Start();
t1.Join();
Console.WriteLine("t1.Join() returned.");
Thread t2 = new Thread(() => {
Thread.Sleep(1000);
Console.WriteLine("t2 is ending.");
});
t2.Start();

t2.Join();
Console.WriteLine("t2.Join() returned.");
Console.ReadLine();
}
موفق باشید

irpersian20
یک شنبه 25 فروردین 1392, 17:43 عصر
سلام
نه کلا عملکرد جوین رو من قاطی کردم.
چرا ماکروسافت این طور کد رو نوشته و چرا این طور پاسخ میده؟
اصلا کسی میتونه از نو join رو تعریف کنه؟ مگر وقتی یک ترد رو جوین میکنیم. دیگه برنامه به خط های بعدی نمیره تا اون ترد کارش تمام شه درسته؟