السلام عليكم
ديه المفروض اللاب 2 اللى البشمهندس حندوسه حطها فى منتدى الكليه
------------------------------------------
لاب 2
فكره الاب هيا process ,threading
عارفين ان البروسيس هو البرنامج لما يتحط فى الميمورى
بس لما نجى نميز البروسيس ديه بطريقه اكتر
بنقول انها
address space او المساحه اللى بيخدها البرنامج ده فى الميمورى
وكمان الresource الخاصه بالبروسس ده
ده كان فى الانظمه القديمه الى بتشغل بروسيس واحده وبس فى نفس الوقت
دلوقتى بقى ممكن اكتر من بروسيس تشتغل وكلهم مشتركين فى نفس الresource
وممكن البروسيس الواااااحده نفسها تتجزء اجزاء صغيره threading كل جزء يتنفذ بشكل منفصل عن التانى كانه بروسيس بالظبط
زى فى الاوفيس الواحد بيكتب والبرنامج بيسيف فى نفس الوقت
1- يقرى البارميتر اللى هتجيله من شاشه الكنسول
2-يفتح ملف فيه اوامر
3-يقرى كل امر وينفذه
اجزاء الكود
" و عملتو رن مش هيقبل حاجه عشان الكود ده يشتغل بالشكل ده لازم يتعمله كومبيل بالدوس بامر csc"
يعمل معلومات عن بروسيس جديده الى هو الدوس فى السطر ده
info.FileName = "cmd";
ممكن البروسيس تكون اى حاجه تانيه مثلا النوت باد
info.FileName = "notepad.exe";
وبعدين جه حدد ان الاوامر الى هتتنفذ فى الدوس هيا اللى قراه من الملف
وبعدين جه شغل البروسيس
الجزء التانى من اللاب
عاوز يقرى مجموعه اوامر عل بعض
يخد كل امر ينفذه فى thread منفصل عن الباقى
بيحسب الوقت اللى المفروض الثريد تقف فيه بانه يجيب الوقت الحالى ويجمع مده التشغيل
الثريد المفروض بتخد باميتر من نوعه
"الديلجت نوع من انواع design pattren بعمل فيه جزء بيهتم بالاينفت الى ممكن تحصل زى كلك عل الماوس بدل ما اخلى الكلاس الرئيسه تهتم هيا بالاينفت وتسيب بقيت الشغل" delegate متعرف جاهز فى السى شارب
اسمه threadstart لما تكون الميثود اللى هنده عليها مش بتخد اى باميتر
بس هنا هو عاوز ينده عل الميثود
static void ThreadWork(object threadNumber)
بس ديه بتخد باميترا
فاستخدم ديجلت ParameterizedThreadStart
الديجلت بقى بيخد اسم الميثود كابراميتر له "الاسم وبس مش محتاج اقواس"
وبعدين يبدا يشغل كل ثريد
t.Start(i);
هنا بقى المفرونروح الثريد ولا نكمل السطر اللى تحت
مش نتعب نفسنا عشان فى برامج الmultithreading
ترتيب تنفيذ الكود بيبقى حسب البروسيسور يعنى نفس البرنامج هجيب نتيجه مختلفه عل اكتر من جهاز وحتى عل نفس الجهاز
لو روحنا ننفذ الثريد فالمفروض هيروح المثيود ويحسب وقتين
وقت يخلى فيه الثريد شغاله
ووقت يوقف الثريد ديه ويخلى الباقى يشتغلو
بسسسسسسسسسسسسسسس كده
ديه المفروض اللاب 2 اللى البشمهندس حندوسه حطها فى منتدى الكليه
------------------------------------------
لاب 2
فكره الاب هيا process ,threading
عارفين ان البروسيس هو البرنامج لما يتحط فى الميمورى
بس لما نجى نميز البروسيس ديه بطريقه اكتر
بنقول انها
address space او المساحه اللى بيخدها البرنامج ده فى الميمورى
وكمان الresource الخاصه بالبروسس ده
ده كان فى الانظمه القديمه الى بتشغل بروسيس واحده وبس فى نفس الوقت
دلوقتى بقى ممكن اكتر من بروسيس تشتغل وكلهم مشتركين فى نفس الresource
وممكن البروسيس الواااااحده نفسها تتجزء اجزاء صغيره threading كل جزء يتنفذ بشكل منفصل عن التانى كانه بروسيس بالظبط
زى فى الاوفيس الواحد بيكتب والبرنامج بيسيف فى نفس الوقت
- الكود:
using System;
using System.IO;
using System.Diagnostics;
namespace Lab2A
{
class Program
{
static void Main(string[] args)
{
if (args.Length != 2)
{
Console.WriteLine("Command format is: Lab2A filename");
return;
}
string fileName = args[1];
StreamReader sr = null;
try
{
sr = new StreamReader(fileName);
while (!sr.EndOfStream)
{
string command = sr.ReadLine();
ProcessStartInfo info = new ProcessStartInfo();
info.FileName = "cmd";
info.Arguments = "/C " + command;
info.WindowStyle = ProcessWindowStyle.Hidden;
Process p = new Process();
p.StartInfo = info;
p.Start();
}
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
}
finally
{
if (sr != null) sr.Close();
}
}
}
}
1- يقرى البارميتر اللى هتجيله من شاشه الكنسول
2-يفتح ملف فيه اوامر
3-يقرى كل امر وينفذه
اجزاء الكود
- الكود:
if (args.Length != 2)
{
Console.WriteLine("Command format is: Lab2A filename");
return;
}
" و عملتو رن مش هيقبل حاجه عشان الكود ده يشتغل بالشكل ده لازم يتعمله كومبيل بالدوس بامر csc"
- الكود:
sr = new StreamReader(fileName);
while (!sr.EndOfStream)
{
string command = sr.ReadLine();
ProcessStartInfo info = new ProcessStartInfo();
info.FileName = "cmd";
info.Arguments = "/C " + command;
info.WindowStyle = ProcessWindowStyle.Hidden;
يعمل معلومات عن بروسيس جديده الى هو الدوس فى السطر ده
info.FileName = "cmd";
ممكن البروسيس تكون اى حاجه تانيه مثلا النوت باد
info.FileName = "notepad.exe";
وبعدين جه حدد ان الاوامر الى هتتنفذ فى الدوس هيا اللى قراه من الملف
وبعدين جه شغل البروسيس
- الكود:
Process p = new Process();
p.StartInfo = info;
p.Start();
الجزء التانى من اللاب
عاوز يقرى مجموعه اوامر عل بعض
يخد كل امر ينفذه فى thread منفصل عن الباقى
- الكود:
using System;
using System.Threading;
namespace Lab2B
{
class Program
{
static bool _runFlag = true;
static void Main(string[] args)
{
if (args.Length != 3)
{
Console.WriteLine("Command format is: Lab2B threadsCount runTime");
return;
}
int threadsCount = int.Parse(args[1]);
int runTime = int.Parse(args[2]);
DateTime stopTime = DateTime.Now.AddSeconds(runTime);
for (int i = 0; i < threadsCount; i++)
{
// create a new thread to execute simulated work
Thread t = new Thread(
new ParameterizedThreadStart(ThreadWork));
t.Start(i);
Thread.Sleep(100); // let the newly created thread run
}
// cycle whilechildren work
while (_runFlag)
{
DateTime now = DateTime.Now;
if (now > stopTime) _runFlag = false;
Thread.Sleep(1000);
}
}
static void ThreadWork(object threadNumber)
{
// local variables
double y;
const double x = 3.14159;
const double e = 2.17183;
const int napTime = 1000; // in milliseconds
const int busyTime = 40000;
// create load
while (_runFlag)
{
// CPU burst phase
for (int i = 0; i < busyTime; i++) y = Math.Pow(x, e);
// sleep phase
Thread.Sleep(napTime);
Console.WriteLine("Thread " + threadNumber.ToString());
}
}
}
}
بيحسب الوقت اللى المفروض الثريد تقف فيه بانه يجيب الوقت الحالى ويجمع مده التشغيل
- الكود:
int runTime = int.Parse(args[2]);
DateTime stopTime = DateTime.Now.AddSeconds(runTime);
الثريد المفروض بتخد باميتر من نوعه
"الديلجت نوع من انواع design pattren بعمل فيه جزء بيهتم بالاينفت الى ممكن تحصل زى كلك عل الماوس بدل ما اخلى الكلاس الرئيسه تهتم هيا بالاينفت وتسيب بقيت الشغل" delegate متعرف جاهز فى السى شارب
اسمه threadstart لما تكون الميثود اللى هنده عليها مش بتخد اى باميتر
بس هنا هو عاوز ينده عل الميثود
static void ThreadWork(object threadNumber)
بس ديه بتخد باميترا
فاستخدم ديجلت ParameterizedThreadStart
الديجلت بقى بيخد اسم الميثود كابراميتر له "الاسم وبس مش محتاج اقواس"
وبعدين يبدا يشغل كل ثريد
t.Start(i);
هنا بقى المفرونروح الثريد ولا نكمل السطر اللى تحت
مش نتعب نفسنا عشان فى برامج الmultithreading
ترتيب تنفيذ الكود بيبقى حسب البروسيسور يعنى نفس البرنامج هجيب نتيجه مختلفه عل اكتر من جهاز وحتى عل نفس الجهاز
لو روحنا ننفذ الثريد فالمفروض هيروح المثيود ويحسب وقتين
وقت يخلى فيه الثريد شغاله
ووقت يوقف الثريد ديه ويخلى الباقى يشتغلو
- الكود:
const int napTime = 1000; // in milliseconds
const int busyTime = 40000;
// create load
while (_runFlag)
{
// CPU burst phase
for (int i = 0; i < busyTime; i++) y = Math.Pow(x, e);
// sleep phase
Thread.Sleep(napTime);
Console.WriteLine("Thread " + threadNumber.ToString());
}
}
بسسسسسسسسسسسسسسس كده
عدل سابقا من قبل cs_senior في الجمعة 8 مايو 2009 - 17:08 عدل 1 مرات