PDA

View Full Version : سوال: فعال بودن تابع برای زمانی خاص



irpersian20
دوشنبه 21 اسفند 1391, 14:57 عصر
سلام
من با تردینگ میخوام بگم فلان تابع مثلا 4 ثانیه اجرا بشه.
چطور میتونم این کار کنم؟ آرگومانی چیزی ندیدم تو تابع هاش.

irpersian20
دوشنبه 21 اسفند 1391, 17:56 عصر
ترد را 4 ثانیه sleep کنید.
سلام
ترد main رو؟
بببنید من مثلا 10 تا ترد دارم و هر کدام یک زمان خاص داره. یکی 5 ثانیه یکی 10 یکی 20 ثانیه
میخوام بگم ترد یک 9 ثانیه مثلا اجرا باشه
تمام شد ترد 2 14 ثانیه اجرا بشه
این طور

irpersian20
سه شنبه 22 اسفند 1391, 00:00 صبح
من میخوام یک تایع 10 ثانیه اجرا بشه و بره و تمام
همین

mehdi zanjani
سه شنبه 22 اسفند 1391, 13:40 عصر
هر جا سخن از زمان است نام timer می درخشد ، از نظر بنده استفاده از timer کاربرد بیشتری داره. تابع رو از داخل timer اجرا کن.

C#‎_best_Programmer
سه شنبه 22 اسفند 1391, 13:49 عصر
داشم تو سوالت بی معنی تابع یه چیزه که یا یه کاری انجتم میده یا یه خروجی داره ولی اگه می خوای یه کار 4 سانیه اجرا بشه باید یه حلقه همراه با thread.sleep()استفاده کنی

irpersian20
سه شنبه 22 اسفند 1391, 15:38 عصر
هر جا سخن از زمان است نام timer می درخشد ، از نظر بنده استفاده از timer کاربرد بیشتری داره. تابع رو از داخل timer اجرا کن.
امکان داره مثالی بزنید؟ متوجه بشیم

irpersian20
سه شنبه 22 اسفند 1391, 16:37 عصر
داشم تو سوالت بی معنی تابع یه چیزه که یا یه کاری انجتم میده یا یه خروجی داره ولی اگه می خوای یه کار 4 سانیه اجرا بشه باید یه حلقه همراه با thread.sleep()استفاده کنی
سلام
من فکر نکنم sleep به درد ما بخوره. چون شاید ترد کارش تمام هست و ترد دیگه تو حافظه نمونه و خاتمه پیدا کنه با sleep همچنان ترد وجود داره

hamid_hr
سه شنبه 22 اسفند 1391, 16:49 عصر
بيا اين كارو بكن
تابع رو با thread اجرا كن بعد يك تايمر رو فعال كن مثلا رو 4 ثانيه تايمر كه اجرا شد thread.abort رو اجرا كن

Mahmoud.Afrad
سه شنبه 22 اسفند 1391, 17:05 عصر
بوسیله ترد: اول زمان خاتمه را محاسبه کنید و تا زمانی که زمان حال حاضر کوچکتر از زمان انقضا هست کاری رو انجام بدید:

private void button1_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(MyMethode));
t.IsBackground = true;
t.Start();
}

private void MyMethode()
{
DateTime expirationTime = DateTime.Now.AddSeconds(4);
while (DateTime.Now < expirationTime)
{
// do somthings
}
}

irpersian20
چهارشنبه 23 اسفند 1391, 00:23 صبح
بوسیله ترد: اول زمان خاتمه را محاسبه کنید و تا زمانی که زمان حال حاضر کوچکتر از زمان انقضا هست کاری رو انجام بدید:

private void button1_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(MyMethode));
t.IsBackground = true;
t.Start();
}

private void MyMethode()
{
DateTime expirationTime = DateTime.Now.AddSeconds(4);
while (DateTime.Now < expirationTime)
{
// do somthings
}
}

سلام
2 تا مشکل هست. یکی abort کردن ترد هست و دومی اینکه اگر 100 تابع داشته باشیم باید 100 بار این موارد رو تعریف کنیم.

irpersian20
چهارشنبه 23 اسفند 1391, 00:41 صبح
من به یک همچنن چیزی نیاز دارم.

For 4 sec
{
T.Start()
next
T.Abort
}

hamid_hr
چهارشنبه 23 اسفند 1391, 12:32 عصر
سلام
اينو ببين101379

Mahmoud.Afrad
چهارشنبه 23 اسفند 1391, 17:25 عصر
سلام
2 تا مشکل هست. یکی abort کردن ترد هست و دومی اینکه اگر 100 تابع داشته باشیم باید 100 بار این موارد رو تعریف کنیم.
abort برای چی؟ بعد از 4 ثانیه حلقه و در نتیجه ترد به کارش خاتمه میده.

با تایمر هم میتونید انجام بدید. در رویداد تیک تایمر کارهاتون رو انجام بدید و بعد تایمر رو استاپ و از بین ببرید:

System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
timer.Interval = 4000;
timer.Tick += (object obj, EventArgs ea) =>
{
timer.Dispose();

// do somthing Here
};
timer.Start();

hamid_hr
چهارشنبه 23 اسفند 1391, 18:05 عصر
101391

---------------------------------------------------------------------------------