PDA

View Full Version : مبتدی: برنامه نویسی چند نخی multi thread programming



maryam94
سه شنبه 25 فروردین 1394, 08:28 صبح
سلام دوستان من به تازگی کار با c# و ترد رو شروع کردم و برای حل یک قسمت از برنامه مشکل دارم برنامه یک عدد nبه عنوان ورودی میگیره و به همون تعداد ترد میسازه بعد هر تردn /1 ارایه رو با عدد تصادفی پر میکنه و به این صورت که هر ترد یک قسمت خاص رو پر میکنه و نقطه پایان کار یک ترد برابر با نقطه شروع کار ترد بعد میشه حالا همین قسمتی که ارایه میخاد پر بشه و بازهها رو کنترل کنم رو نمیدونم چیکار کنم
ممنون میشم کمک کنید.

class Program
{
int start;
int end;
static int[] Aray = new int[1000000];


public Program(int s,int e,int []array){
start= s;
end =e;
Aray= array;
}
private static Random R = new Random();
public void fill(){
int e;
int s;
s = start;
e = end;


for (int i = s; i < e; i++) {
Aray[i] = R.Next(1, 100);


}
}

static void Main(string[] args)
{
int n = int.Parse(Console.ReadLine());
for (int i = 0; i <n; i++) {
Aray[i] = 0;
}


Thread []threadsArray=new Thread[n];
int p=1000000 / n;


TimeSpan ts;
DateTime dt = DateTime.Now;

for (int i = 0; i < n; i++)
{
threadsArray[i].Start();
}

for (int i = 0; i < n; i++)
{
threadsArray[i].Join();
}


ts = DateTime.Now.Subtract(dt);
Console.WriteLine(ts.Hours + " : " + ts.Minutes + " : " + ts.Seconds + " : " + ts.Milliseconds);

int x = 0;
for (int i = 0; i < 1000000; i++) {
if (Aray[i]==0)
x++;

}

Console.WriteLine( " number of zeroo " + x);
}

Moseyza
سه شنبه 25 فروردین 1394, 08:55 صبح
در حال حاضر نخ های شما هیچ کاری انجام نمیدن
باید با کدی شبیه به کد زیر این کار رو انجام بدید:




Thread t = new Thread(() => fill(e,s,array));
t.start();


public void fill(int e,int s,int[] array)
{

for (int i = s; i < e; i++)
{
array[i] = R.Next(1, 100);
}
}

maryam94
سه شنبه 25 فروردین 1394, 10:46 صبح
درسته هیچ کاری نمی کنند اما با کدی شبیه به این چطوری بازه کاری ترد ها رو کنترل کنم؟

Moseyza
سه شنبه 25 فروردین 1394, 11:06 صبح
درسته هیچ کاری نمی کنند اما با کدی شبیه به این چطوری بازه کاری ترد ها رو کنترل کنم؟

تابعی بنویسید که هر بار فراخوانی کردید بازه منحصر به فردی رو بهتون پاس بده که دفعه بعد دوباره همونو نده و هر نخی رو که استارت کردید اون بازه رو بهش بدید.
نوشتن چنین تابعی سخت نیست.

maryam94
سه شنبه 25 فروردین 1394, 15:20 عصر
ممنونم از راهنماییهاتون برنامه درست شد لطف کردید.
دوستان اگر کسی مرجع خوبی درباره اموزش c# معرفی کنه ممنون میشم

darya62
دوشنبه 31 فروردین 1394, 13:35 عصر
سلام خسته نباشید
من یه برنامه ترد رو میخواستم اجرا کنم ولی نمیدونم مشکلش چیه و ارور میده
کسی میتونه اشکال برنامه رو بگیره؟؟
ممنون میشم
اینم کدش :





namespace consoleApplication1

{


class threadtest


{


static void main()

{


Thread t = new thread(writeY);

t.start();


while (true) Console.write("x");

}


static void writeY()

{


while (true) Console.write("y");

}

}

}

sohil_ww
دوشنبه 31 فروردین 1394, 14:02 عصر
سلام خسته نباشید
من یه برنامه ترد رو میخواستم اجرا کنم ولی نمیدونم مشکلش چیه و ارور میده
کسی میتونه اشکال برنامه رو بگیره؟؟
ممنون میشم
اینم کدش :





namespace consoleApplication1

{


classthreadtest


{


staticvoid main()

{


Thread t = newthread(writeY);

t.start();


while (true) Console.write("x");

}


staticvoid writeY()

{


while (true) Console.write("y");

}

}

}









کذاتو تو کد های سی شارپ قرار بده ؟
نا خوانا بشه

darya62
دوشنبه 31 فروردین 1394, 17:06 عصر
سلام
مشکلم حل شد
ممنون

darya62
دوشنبه 31 فروردین 1394, 17:14 عصر
کامنتم رو چجوری میتونم حذف کنم؟؟