PDA

View Full Version : سوال: Join چند Thread



water_lily_2012
چهارشنبه 15 آبان 1392, 19:38 عصر
سلام
در کد زیر می خواهم که ترد های هر case با هم Join شوند و تردهای Caseها باهم اجرا شوند ولی همه ترد ها با هم Join می شوند.

private static void test(string message)
{
Console.WriteLine(message);
Thread.Sleep(1000);
}
private static void main()
{
string message;
int[] array = new int[] {1,1,1,2,2,1,3,3,1,2,2,1,3,3,2,1,2};
foreach (int myint in array)
{
switch (myint)
{
case 1:
message="This is thread 1";
Thread t1=new Thread(()=>test(message));
t1.Start();
t1.Join();
break;
case 2:
message="This is thread2";
Thread t2=new Thread(()=>test(message));
t2.Start();
t2.Join();
break;
case 3:
message="This is thread3";
Thread t3=new Thread(()=>test(message));
t3.Start();
t3.Join();
break;
}
}
}

تشکر

FastCode
چهارشنبه 15 آبان 1392, 20:18 عصر
private static void test(string message)
{
Console.WriteLine(message);
Thread.Sleep(1000);
}
private static void main()
{
string message;
int[] array = new int[] {1,1,1,2,2,1,3,3,1,2,2,1,3,3,2,1,2};
Thread t1 = null;
Thread t2 = null;
Thread t3 = null;
foreach (int myint in array)
{
switch (myint)
{
case 1:
message="This is thread 1";
if(t1 != null) t1.Join();
t1 = new Thread(()=>test(message));
t1.Start();
break;
case 2:
message="This is thread2";
if(t2 != null) t2.Join();
t2 = new Thread(()=>test(message));
t2.Start();
break;
case 3:
message="This is thread3";
if(t3 != null) t3.Join();
t3 = new Thread(()=>test(message));
t3.Start();
break;
}
}
}

water_lily_2012
چهارشنبه 15 آبان 1392, 20:40 عصر
لطف می کنید یه توضیح هم راجع به مشکلی که داشتم بدید.
بررسی کردید که ترد جاری null نباشه درسته؟؟
یک سوال هم دارم. اگر تابعی که به ترد ارسال میشه خروجی داشته باشه چگونه خروجی را در قسمت Case بدست بیارم؟؟
تشکر

FastCode
چهارشنبه 15 آبان 1392, 21:32 عصر
برای اینکه تردها قبل از اینکه ایجاد بشن وجود ندارن و نمیتونن Join بشن.
یک پارامتر (ترجیحا از نوع IAsnycResult) به ترد میدید و مقدار خروجیش رو بعد از Join بررسی میکنید و خالی میکنید.بعد از حلقه هم باید این کار رو بکنید.

به نظر من بهتره یک مقدار راجع به ترد ها و مدل های حافظه و وضعیت های ترد ها و fork تحقیق کنید.خیلی کمکتون میکنه