PDA

View Full Version : سوال: سوال راجب تایمر



alireza_kaka
پنج شنبه 23 آبان 1392, 15:45 عصر
خب سلام
1 تایمر هست با 3 تا تکست باکس
interval تایمر برابر 6 ثانیه هست
خب یه کد نوشتم که هر 6 ثانیه یکبار تکست باکس 1 رو مساوی تکست باکس 2 قرار بده
حالا اگه بخوام وقتی که تایمر داره از ثانیه 3 میگذره تکست باکس 1 مساوری تکست باکس 3 بشه باید چیکار کنم؟
نتونستم از این ساده تر بگم ببخشید

rahnema1
پنج شنبه 23 آبان 1392, 18:41 عصر
نمی دونم تونستم منظور شما رو بگیرم شما باید اینتروال رو 3 ثانیه بگیرید

bool a = false;
void Timer1Tick(object sender, EventArgs e)
{
if (a)
{
textBox1.Text = textBox2.Text;
a = !a;
}
else
{
textBox1.Text = textBox3.Text;
a = !a;
}
}

mohammad_f.n
پنج شنبه 23 آبان 1392, 22:41 عصر
سوال با interval =6 نمیشه حل کرد میتونی 1 بگیری و با if کنترلش کنی هر وقت خواستی مثل 3 شد شمارنده تو if چک کنی بعد کار مورد نظرت رو انجام بدی و 6 شد باز همین و اخر هم شمارنده رو 0 کنی که این کارا همیشه تا وقتی که timer فعال هست انجام بشه

rahnema1
پنج شنبه 23 آبان 1392, 23:38 عصر
تا خود alireza_kaka پیداش نشه نمی شه گفت منظورش از سوال چی بوده اینکه از ثانیه 3 گذشت منظورش آیا این بوده فقط یک بار textbox1 عوض بشه یا به طور متوالی؟ به هر حال بر اساس حدس یک جوابی داده شد

rahnema1
جمعه 24 آبان 1392, 00:05 صبح
اگه بخواد فقط یکبار در ثانیه 3 باکس 1 با 3 برابر بشه اینجوریه البته به شرطی که اینتروال 3 باشه:

bool a= false;
void Timer1Tick(object sender, EventArgs e)
{
if(a)
{
textBox1.Text=textBox2.Text;
}
else
{
textBox1.Text=textBox3.Text;
a=!a;
}

}

alireza_kaka
جمعه 24 آبان 1392, 00:14 صبح
سلام ببخشيد گيجتون كردم بزاريد اينجوري بگم كه سوال رو.اونجا اومدم سادش كنم مثلا:
ببينيد من تو 1 متد دوتا xml دارم كه فرستاده ميشه به سرور.خب كاري به اينجاش ندارم.من ميخوام يه تايمر بزارم كه هر 6 ثانيه يكبار كد رو بفرست به سرور.حالا اگه تا ثانيه 3 سرور جواب داده بود كه هيچي اگه سرور جوابشو نداده بود تو ثانيه 3 دوباره كد رو بفرسته به سرور.همين.ممنون همگي

alireza_kaka
جمعه 24 آبان 1392, 00:44 صبح
private void timer2_Tick(object sender, EventArgs e)
{
alireza.Send("<message to='" + textBox4.Text + "@conference.chrome.pl' type='groupchat'><body>1</body></message>");
// inja mikham ye if bezaram ke age timer resid be 3 va age checkbox2 false bud yani server javab nadaeh bud code 2 ro befresteh
if (checkBox2.Checked == false) //age javabo begireh checkbox True mishe Age Nagireh false mimuneh
{
alireza.Send("<message to='" + textBox4.Text + "@conference.chrome.pl' type='groupchat'><body>2</body></message>");
}
}

rahnema1
جمعه 24 آبان 1392, 05:54 صبح
به فرض اینکه همه چیز با کلیک یک دکمه شروع بشه و البته باید اینتروال 3 باشه:

void Button1Click(object sender, EventArgs e)
{
alireza.Send("<message to='" + textBox4.Text + "@conference.chrome.pl' type='groupchat'><body>1</body></message>");
timer1.Enabled=true;
}
bool a= false;
void Timer1Tick(object sender, EventArgs e)
{
if(a)
{
alireza.Send("<message to='" + textBox4.Text + "@conference.chrome.pl' type='groupchat'><body>1</body></message>");
a=!a;
}
else
{
if (checkBox2.Checked == false)
{
alireza.Send("<message to='" + textBox4.Text + "@conference.chrome.pl' type='groupchat'><body>2</body></message>");
}
a=!a;
}
}

alireza_kaka
جمعه 24 آبان 1392, 11:06 صبح
به فرض اینکه همه چیز با کلیک یک دکمه شروع بشه و البته باید اینتروال 3 باشه:

void Button1Click(object sender, EventArgs e)
{
alireza.Send("<message to='" + textBox4.Text + "@conference.chrome.pl' type='groupchat'><body>1</body></message>");
timer1.Enabled=true;
}
bool a= false;
void Timer1Tick(object sender, EventArgs e)
{
if(a)
{
alireza.Send("<message to='" + textBox4.Text + "@conference.chrome.pl' type='groupchat'><body>1</body></message>");
a=!a;
}
else
{
if (checkBox2.Checked == false)
{
alireza.Send("<message to='" + textBox4.Text + "@conference.chrome.pl' type='groupchat'><body>2</body></message>");
}
a=!a;
}
}


ممنون از جوابتون اما من نفهمیدم چیشد.یه چیزی شبیه اونکه گفتم میخوام اما انگار راه حلی نداره
میشد از thread استفاده کنم اما اونم برنامه رو غیر فعال میکنه.راه حلی برای thread ندارین که غیرفعال نشه برنامه؟بازم ممنون

alireza_kaka
جمعه 24 آبان 1392, 11:35 صبح
دقیقا مشکلم همینجاست تعداد تیکهای تایمر رو از کجا باید بدست بیارم


int count = 0
count = //???

rahnema1
جمعه 24 آبان 1392, 11:36 صبح
کجاش مشخص نیست؟
مگه شما نمی خواستید در ثانیه صفر کد به سرور فرستاده بشه اگه در ثانیه سه جوابی نیومد دوباره کد فرستاده بشه
سپس در ثانیه 6 همون کد فرستاده بشه به سرور در ثانیه 9 اگه جوابی نیومد کد فرستاده بشه به سرور در ثانیه 12 کد فرستاده بشه به سرور و ....
مگه اینجوری نمی خواهید؟

behzadkhan
جمعه 24 آبان 1392, 11:41 صبح
با سلام

اگه تعداد تایمر ها مهم نیست:

یک راه حل ساده:

یک تایمر اضافه کن و مقدار interval را برابر 3 ثانیه قرار بده.

با تشکر

alireza_kaka
جمعه 24 آبان 1392, 11:49 صبح
کجاش مشخص نیست؟
مگه شما نمی خواستید در ثانیه صفر کد به سرور فرستاده بشه اگه در ثانیه سه جوابی نیومد دوباره کد فرستاده بشه
سپس در ثانیه 6 همون کد فرستاده بشه به سرور در ثانیه 9 اگه جوابی نیومد کد فرستاده بشه به سرور در ثانیه 12 کد فرستاده بشه به سرور و ....
مگه اینجوری نمی خواهید؟
واقعا شرمنده و خیلی ممنون که انقد زود جواب میدین
این bool a که تعریف کردین چی هستش؟
تو این کدی که شما دادین اگه تو ثانیه 3 جواب اومده بود تو همون ثانیه 3 دوباره کد 1 رو میفرسته اما من میخوام تا ثانیه 6 صبر کنه بعد بفرسته.یعنی کد 1 فقط تو ثانیه 6 فرستاده بشه و کد 2 تو ثانیه 3.درصورتی که با تایمر شما اگه جواب اومده بود ثانیه 3 دوباره کد 1 رو میفرسته.ممنون

alireza_kaka
جمعه 24 آبان 1392, 11:51 صبح
با سلام

اگه تعداد تایمر ها مهم نیست:

یک راه حل ساده:

یک تایمر اضافه کن و مقدار interval را برابر 3 ثانیه قرار بده.

با تشکر
آره اما باید صبر کنه تا 3 ثانیه اولش تموم بشه.مشکل همینجاس چطوری تیک تایمر رو بشمارم

rahnema1
جمعه 24 آبان 1392, 11:55 صبح
آخر نفهمیدیم چه طور شد منظورتون این جوریه؟
ثانیه0: کد شماره 1 را بفرست
ثانیه3: اگه جواب آمده بود که هیچ چی اما اگه جواب نیومده بود کد شماره 2 رو بفرست
ثانیه6: کد شماره 1 را بفرست
ثانیه9:اگه جواب آمده بود که هیچ چی اما اگه جواب نیومده بود کد شماره 2 رو بفرست
ثانیه 12: کد شماره 1 را بفرست

لطفا اگه طور دیگری هست همین طوری که من نوشتم شما بنویسید بذارید اینجا

alireza_kaka
جمعه 24 آبان 1392, 12:01 عصر
آخر نفهمیدیم چه طور شد منظورتون این جوریه؟
ثانیه0: کد شماره 1 را بفرست
ثانیه3: اگه جواب آمده بود که هیچ چی اما اگه جواب نیومده بود کد شماره 2 رو بفرست
ثانیه6: کد شماره 1 را بفرست
ثانیه9:اگه جواب آمده بود که هیچ چی اما اگه جواب نیومده بود کد شماره 2 رو بفرست
ثانیه 12: کد شماره 1 را بفرست

لطفا اگه طور دیگری هست همین طوری که من نوشتم شما بنویسید بذارید اینجا

آره دوست عزیز

mp_mp353
جمعه 24 آبان 1392, 12:05 عصر
شاید شاید این به دردت بخوره
Timer t1 = new Timer();
t1.Interval = 3000;
t1.Enabled = true;
t1.Tick += (sender1, e1) =>
{
label2.Text += "\n sec3";
t1.Dispose();
};
label1.Text += "\n sec6";

rahnema1
جمعه 24 آبان 1392, 12:07 عصر
خب من که جوابش رو تو پست شماره 15 دادم دقیقا همون چیزیه که شما می خواهید البته باسد اینتروال رو 3 بگیرید نه 6 تا درست کار کنه کارش هم اینه که یک در میون کد شماره 1 و 2 رو میفرسته البته با همومن شرطی که گفته بودید وقتی بصورت یک در میون باشه بعلت اینکه اینتروال 3 هست میشه دو تا 3 تا یعنی 6 تا و bool هم کارش مثل چک باکس شماست که هر دفعه مقدارش عوض میشه

alireza_kaka
جمعه 24 آبان 1392, 12:21 عصر
خب من که جوابش رو تو پست شماره 15 دادم دقیقا همون چیزیه که شما می خواهید البته باسد اینتروال رو 3 بگیرید نه 6 تا درست کار کنه کارش هم اینه که یک در میون کد شماره 1 و 2 رو میفرسته البته با همومن شرطی که گفته بودید وقتی بصورت یک در میون باشه بعلت اینکه اینتروال 3 هست میشه دو تا 3 تا یعنی 6 تا و bool هم کارش مثل چک باکس شماست که هر دفعه مقدارش عوض میشه
یک در میون هست اما تا ثانیه 3 صبر نمیکنه بینم جواب میاد یا نه همون موقع پشت کد 1 کد دو رو میفرسته

rahnema1
جمعه 24 آبان 1392, 12:35 عصر
دوست عزیز این برنامه که نوشتم اینجوری عمل می کنه
ثانیه0: با فشار دکمه کد 1 فرستاده میشه و تایمر فعال میشه
بعلت اینکه تایمر فعال شده 3 ثانیه صبر می کنه و اجرا میشه
ثانیه3: شرط if بعلت اینکه a برابر false است اجرا نمیشه و else به کار میفته و توی else باز یک if داریم که بررسی می کنه آیا جواب اومده اگه نیومده کد شماره 2 اجرا میشه و مقدار a هم true میشه
تایمر 3 ثانیه صبر می کنه
ثانیه6: شرط if بعلت اینکه a برابر true است اجرا میشه و کد شماره یک اجرا میشه و مقدار a هم false میشه
تایمر 3 ثانیه صبر می کنه
ثانیه9: شرط if بعلت اینکه a برابر false است اجرا نمیشه و else به کار میفته و توی else باز یک if داریم که بررسی می کنه آیا جواب اومده اگه نیومده کد شماره 2 اجرا میشه و مقدار a هم true میشه

mp_mp353
جمعه 24 آبان 1392, 12:37 عصر
راستی کدی که قرار دادم رو داخل tick تایمر اصلی بذارید یعنی:
private void timer1_Tick(object sender, EventArgs e)
{
Timer t1 = new Timer();
t1.Interval = 3000;
t1.Enabled = true;
t1.Tick += (sender1, e1) =>
{
label2.Text += "\n sec3";
t1.Dispose();
};
label1.Text += "\n sec6";
}
و میتونید مقدار تایمر اصلی رو روی 3 ثانیه قرار بدید.

alireza_kaka
جمعه 24 آبان 1392, 12:50 عصر
حبیب جان شما اگه فقط بگین من تیک تایمر رو چطوری بشمارم مشکلم حل میشه

alireza_kaka
جمعه 24 آبان 1392, 12:51 عصر
دوست عزیز این برنامه که نوشتم اینجوری عمل می کنه
ثانیه0: با فشار دکمه کد 1 فرستاده میشه و تایمر فعال میشه
بعلت اینکه تایمر فعال شده 3 ثانیه صبر می کنه و اجرا میشه
ثانیه3: شرط if بعلت اینکه a برابر false است اجرا نمیشه و else به کار میفته و توی else باز یک if داریم که بررسی می کنه آیا جواب اومده اگه نیومده کد شماره 2 اجرا میشه و مقدار a هم true میشه
تایمر 3 ثانیه صبر می کنه
ثانیه6: شرط if بعلت اینکه a برابر true است اجرا میشه و کد شماره یک اجرا میشه و مقدار a هم false میشه
تایمر 3 ثانیه صبر می کنه
ثانیه9: شرط if بعلت اینکه a برابر false است اجرا نمیشه و else به کار میفته و توی else باز یک if داریم که بررسی می کنه آیا جواب اومده اگه نیومده کد شماره 2 اجرا میشه و مقدار a هم true میشه

آره درسته حرف شما اما من مشکلم جوری هست که فقط با interval 6 و اون جوری که گفتم حل میشه.

alireza_kaka
جمعه 24 آبان 1392, 13:15 عصر
این متغیر حبیب که تعریف کردی میشه بگی کارش چیه

alireza_kaka
جمعه 24 آبان 1392, 13:25 عصر
نه هیچ تغییری ایجاد نکرد

rahnema1
جمعه 24 آبان 1392, 13:27 عصر
آره درسته حرف شما اما من مشکلم جوری هست که فقط با interval 6 و اون جوری که گفتم حل میشه.

میشه به جای مختصر و کوتاه بیان کردن سوال خودتون رو مفصل توضیح بدید؟
همون طوری که من بصورت ثانیه0 ثانیه 3 و ... گذاشتم بذارید
جواب سوال شما در پست های قبلی داده شد آیا سوال دیگه ای هست یا در اجرای کد اشکال وجود داره؟

rahnema1
جمعه 24 آبان 1392, 13:30 عصر
شما یه چیزی توی ذهنتون هست و انتظار دارید ما ذهن خونی بکنیم

alireza_kaka
جمعه 24 آبان 1392, 13:48 عصر
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
string[] soalz = { "2+2=?", "3x20=?", "2x50-80=?", "11x7=?", "12x12=?", "1 2 3 4 5 6 ?", "2 4 6 8 10 ?", "2-5+4=?", "0 2 ? 6 8", "7+2x?=13", "3/?x4=6", "3(7+2)x?=27", "9 2 8 3 ? 4 6 5", "2 5 ? 6 4 7", "1 3 5 7 ?", "3+6-9+?x2=8", "2x3+2=?", "7+?x3=13", "3/2x4=?", "1 5 1 ? 1 7 1 8 1", "6/5x5+7x2=?" };
string[] javabz = { "4", "60", "20", "77", "144", "7", "12", "1", "4", "3", "2", "1", "7", "3", "9", "4", "8", "2", "6", "35", "2", "6", "2", "8", "6", "20" };
string soal;
string javab;
bool solved = true;

XmppClientConnection alireza = new XmppClientConnection();

private void checkBox2_CheckedChanged(object sender, EventArgs e)
{
try
{
if (checkBox2.Checked == true)
{

timer2.Enabled = true;

}
else
{
if (checkBox2.Checked == false)
{
timer2.Enabled = false;
}
}
}
catch { }
}
private void timer2_Tick(object sender, EventArgs e)
{

this.timer2.Interval = 6000;
Random rnd = new Random();
int r = rnd.Next(soalz.Length);//az list soal ha ye soal entekhab mikoneh
soal = soalz[r];//soalesh
javab = javabz[r];//javabesh

alireza.Send("<message to='" + textBox4.Text + "@conference.nimbuzz.com' type='groupchat'><body>Soal : " + soal + "</body></message>");
solved = true;// ke dobareh betuneh jabaha ro begireh


if (// ina mikham begam age ta 3 sanieh baad kasi javab nadad Soal ro tekrar koneh.)

{
alireza.Send("<message to='" + textBox4.Text + "@conference.nimbuzz.com' type='groupchat'><body>Tekrar : " + soal + "</body></message>");
}

}

private void OM(object sender, agsXMPP.protocol.client.Message msg)
{
if (base.InvokeRequired)
{
base.BeginInvoke(new agsXMPP.protocol.client.MessageHandler(OM), new object[] { sender, msg });
}
else
{
try
{

string pm = msg.Body.ToLower();//pm ke az tarafe server miad.yani usr tu room mide
if (pm == javab && solved)//age pm barabare javab bud va solv true bud xml zir ro mifresteh
{
alireza.Send("<message to='" + textBox4.Text + "@conference.nimbuzz.com' type='groupchat'><body>" + msg.From.Resource + " : " + textBox10.Text + "</body></message>");
solved = false;//inja solve false mishe chon faqat 1 nafar mitune javab bd be soal

}
}
}
}
}
}

alireza_kaka
جمعه 24 آبان 1392, 13:49 عصر
این کدش بود دوستان ارزشی نداره فقط میخواستم شلوغ نشه و زود جواب پیدا کنم
این یه رباته که تو روم سوال میپرسه هر 6 ثانیه 1 بار.میخوام اگه تا ثانیه 3 کسی جواب نداده بود تکرارش کنه.
اگه هم کسی جواب داد که حله دیگه میره سوال بعدی
با کامپونت agsXMPP هم نوشته شده

alireza_kaka
جمعه 24 آبان 1392, 14:14 عصر
خوب اینجا شما تایمرو خاموش کردی حالا چه جوری تایمر خاموش شده بیات عدد 2 رو سند کنه اصلا نه تایمر کار می کنه و نه شرطی که می گه اگر چک باکس فالز بود


else
{
if (checkBox2.Checked == false)
{
timer2.Enabled = false;
}
}

تصحيحش كردم بعدش.به هر حال.ممنون حبيب جان و جناب راهنما.تا همينجاشم دستون درد نكنه.موفق باشيد

alireza_kaka
جمعه 24 آبان 1392, 14:29 عصر
اگر درست شد و جواب گرفتید کد تصحیح شده را قرار دهید تا تاپیک مفید باشه به یادگار
حتما اگه جواب گرفتم ميزارمش

FastCode
جمعه 24 آبان 1392, 15:47 عصر
public static int Gcd(int[] x) {
if (x.length < 2) {
throw new ArgumentException("Do not use this method if there are less than two numbers.");
}
int tmp = Gcd(x[x.length - 1], x[x.length - 2]);
for (int i = x.length - 3; i >= 0; i--) {
if (x[i] < 0) {
throw new ArgumentException("Cannot compute the least common multiple of several numbers where one, at least, is negative.");
}
tmp = Gcd(tmp, x[i]);
}
return tmp;
}

public static int Gcd(int x1, int x2) {
if (x1 < 0 || x2 < 0) {
throw new ArgumentException("Cannot compute the GCD if one integer is negative.");
}
int a, b, g, z;

if (x1 > x2) {
a = x1;
b = x2;
} else {
a = x2;
b = x1;
}

if (b == 0) return 0;

g = b;
while (g != 0) {
z= a % g;
a = g;
g = z;
}
return a;
}

}
int[] intervals = ...
void Init()
{
timer.Interval = Gcd(intervals);
timer.Start();
}
void Act(int interval)
{
switch(interval)
{
case 1000:
break;
case 2000:
break;
case 4000:
break;
case 7000:
break;
}
}
int Ticks = 0;
Timer_tick(...)
{
//if all events should be triggered on first loop of timer;
Ticks += timer.Interval;
foreach(int i in intervals)
{
if(ticks % i == 0) {
Act(i);
}
}
//if the other way around
// Ticks += timer.Interval;

}

alireza_kaka
جمعه 24 آبان 1392, 22:15 عصر
سلام جواب این سوال اینجوری میشه
یک تایمر درست میکنیم با interval=1000
بعدش تو هر ثانیه ای که خواستیم با یه if هر چی رو که خواستیم ایجاد میکنیم


int second = 0;
private void timer2_Tick(object sender, EventArgs e)
{
this.timer2.Interval = 1000;

second++;
if (second == 3)
{
xml1
}

if (second == 6)
{
xml2
}

}




ساده تر از چیزی که فکرشو میشد کرد

alireza_kaka
جمعه 24 آبان 1392, 22:50 عصر
خب این متغیر ثانیه همین جوری بزرگ میشه 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ........................
کافیه second = 0 اضافش کنی دوباره میره از اول


int second = 0;
private void timer2_Tick(object sender, EventArgs e)
{
this.timer2.Interval = 1000;

second++;
if (second == 3)
{
xml1
}

if (second == 6)
{
xml2
second = 0;
}

}

alireza_kaka
دوشنبه 27 آبان 1392, 11:10 صبح
اسپم الکی نده بچه جون کدم درسته.یه جور دیگه پستاتو زیاد کن

habibb
سه شنبه 28 آبان 1392, 01:35 صبح
می خواستی 3 ← 2 ← 3 ←2 ←3 ←2 ........←


byte habibb = 0;
private void timer1_Tick(object sender, EventArgs e)
{
habibb++;
if (habibb % 3 == 0)
{
textBox1.Text = textBox3.Text;
}
if (habibb % 6 == 0)
{
textBox1.Text = textBox2.Text;
}
}

habibb
سه شنبه 28 آبان 1392, 02:01 صبح
سریعترین روش گرفتن تمام قدرت cpu
یعنی هر چی که cpu زورش برسه:متعجب:



byte habibb = 0;
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i >= 0; i++)
{
habibb++;
if (habibb % 3 == 0)
{
textBox1.Text = textBox3.Text;
}
if (habibb % 6 == 0)
{
textBox1.Text = textBox2.Text;
}
}
}