PDA

View Full Version : کارکرد همزمان دو تایمر



Beginneruser
چهارشنبه 09 بهمن 1392, 19:17 عصر
سلام دوستان عزیز
دوستان عزیز چطور میشه کاری کرد که دو تا تایمر همزمان کار کنند و برنامه و سیستم هنگ نکنه یعنی برنامه ای که روش کار کردم دوتا تایمر داره که به صورت همزمان و با اینترول 1 درحال کار کردن هستش میخواستم بدونم ایا راهی هست که از هنگ برنامه جلوگیری کرد

babak1368
چهارشنبه 09 بهمن 1392, 20:33 عصر
سلام دوست عزیز
اگر interval =1 باشه این یعنی یک هزارم ثانیه که هر کاری بکنی تقریبا سیستم هنگ میکنه.البته نه حتما
اگر منظورت 1 ثانیه هست که میشه interval=1000; باز هم پیشنهاد نمیشه.پس شما باید interval بالاتر ست کنی
ولی اگر نیاز داری interval پایین باشه می تونی تایمرهارو روی Thread جدا اجرا کنی
تو گوکل نحوه استفاده Thread را میتونی پیدا کنی
موفق باشی

Beginneruser
پنج شنبه 10 بهمن 1392, 12:52 عصر
سلام دوست عزیز
اگر interval =1 باشه این یعنی یک هزارم ثانیه که هر کاری بکنی تقریبا سیستم هنگ میکنه.البته نه حتما
اگر منظورت 1 ثانیه هست که میشه interval=1000; باز هم پیشنهاد نمیشه.پس شما باید interval بالاتر ست کنی
ولی اگر نیاز داری interval پایین باشه می تونی تایمرهارو روی Thread جدا اجرا کنی
تو گوکل نحوه استفاده Thread را میتونی پیدا کنی
موفق باشی
سلام دوست عزیز تو گوگل چیز خاصی پیدا نکردم که از دوتا تایمر به صورت همزمان یه یکی دائما با اینترول 1 و دیگری با زمانهای مختلف هزمان کار کنند برای جلوگیری از هنگ کردنش فقط راح حلش نخها هستش که نتونستم با نخ اجراش کنم

hamid_hr
پنج شنبه 10 بهمن 1392, 13:04 عصر
اینطوری بنویسش


void MainFun()
{
System.Threading.Thread t1;
t1 = new System.Threading.Thread(Fun1);
t1.IsBackground = true;
t1.Start();
t1 = new System.Threading.Thread(Fun2);
t1.IsBackground = true;
t1.Start();
System.Threading.Thread.Sleep(1);
}
void Fun1()
{
//کدهای تایمر اول
}
void Fun2()
{
//کدهای تایمر دوم
}


تو رویداد form_Load() هم اینو بنویس


System.Threading.Thread t1 = new System.Threading.Thread(MainFun);
t1.IsBackground = true;
t1.Start();

mahdi.compute
پنج شنبه 10 بهمن 1392, 14:59 عصر
من از این کد استفاده کردم اما فقط دو بار کار انجام میده !
فقط تو لیست باکسم 4 تا آیتم ادد میشه !
ایجوری استفاده کردم !


void MainFun()
{
System.Threading.Thread t1;

t1 = new System.Threading.Thread(Fun1);
t1.IsBackground = true;
t1.Start();

t1 = new System.Threading.Thread(Fun2);
t1.IsBackground = true;
t1.Start();

System.Threading.Thread.Sleep(1);
}
void Fun1()
{
this.BeginInvoke((MethodInvoker)delegate() { listBox1.Items.Add("f1"); });
}
void Fun2()
{
this.BeginInvoke((MethodInvoker)delegate() { listBox1.Items.Add("f2"); });
}

private void Form2_Load(object sender, EventArgs e)
{
System.Threading.Thread t1 = new System.Threading.Thread(MainFun);
t1.IsBackground = true;
t1.Start();
}

hamid_hr
پنج شنبه 10 بهمن 1392, 15:15 عصر
ببخشید یه تیکه جا موند
این تابع mainFun رو اینطوری بنویس

void MainFun()
{
while(true){
System.Threading.Thread t1;
t1 = new System.Threading.Thread(Fun1);
t1.IsBackground = true;
t1.Start();
t1 = new System.Threading.Thread(Fun2);
t1.IsBackground = true;
t1.Start();
System.Threading.Thread.Sleep(1);
}
}

Beginneruser
پنج شنبه 10 بهمن 1392, 15:48 عصر
اینطوری بنویسش


void MainFun()
{
System.Threading.Thread t1;
t1 = new System.Threading.Thread(Fun1);
t1.IsBackground = true;
t1.Start();
t1 = new System.Threading.Thread(Fun2);
t1.IsBackground = true;
t1.Start();
System.Threading.Thread.Sleep(1);
}
void Fun1()
{
//کدهای تایمر اول
}
void Fun2()
{
//کدهای تایمر دوم
}


تو رویداد form_Load() هم اینو بنویس


System.Threading.Thread t1 = new System.Threading.Thread(MainFun);
t1.IsBackground = true;
t1.Start();


مهندس عزیز ممنون از لطفت و وقتی که گذاشتی، برای تایمرها که یکی همیشه ثابت با اینترول 1 هستش و دیگری با اینترولهای مختلف که توسط کاربر تنظیم میشه چیکار میشه کرد یعنی یکی از تایمرها زمانش متغیر هستش

hamid_hr
پنج شنبه 10 بهمن 1392, 17:03 عصر
اون mainFun رو دو تا کن مثلا mainfun1, mainfn2
یکی برای fun1 و یکی برای fun2
حالا تو هر کدوم یه ترد استارت کن تو اولی fun1 و تو دومی fun2
حالا با thread.sleep میتونی interval رو تغییر بدی
خودت تست کن

Beginneruser
جمعه 11 بهمن 1392, 15:29 عصر
اون mainFun رو دو تا کن مثلا mainfun1, mainfn2
یکی برای fun1 و یکی برای fun2
حالا تو هر کدوم یه ترد استارت کن تو اولی fun1 و تو دومی fun2
حالا با thread.sleep میتونی interval رو تغییر بدی
خودت تست کن
سلام مهندس عزیز ممنون ازکمکات من این دستور رو چک کردم وکار هم کرد ولی یکمی نسبت به تایمر کند عمل میکنه یعنی جوابی رو که میخوام نگرفتم ببین دوست عزیزمن یه تایمر با اینترول یک 1 برای ذخیره کلیدها و یه تایمر دیگه با اینترول متغیر از طریق کاربر برای ذخیره تصاویر صفحه استفاده میشه که موقع استفاده از برنامه زمانی که هر دوتایمر باهم اجرا میشن سیستم و برنامه یکمی کند میشه میخواستم این دو تایمر بدون کند شدن و بدون خلل در برنامه باهم اجرا بشن الته تنها راهحلش نخها به نظرم رسید اگه دوستان کمک دیگه ای بلد هستش دریغ نکنه
دوستان عزیز دریغ نکنید خوب چقد وقتتونو میگیره که جواب نمیدید خوب میخوام یه چیزی ازتون یاد بگیرم