چون private message زده بودی برام برای اینکه جوابت رو بدم یک مثال آماده کرده بودم ولی وقتی که میخواستم update کنم دیدم اقای احمدی لپ کلام رو گفتن ممنون ولی خوب بگذار کاملتر جوابت رو بگیری
اول روش خودت
به مثال زیر نگاه کن
long j = 0;
privatevoid button2_Click(object sender, EventArgs e)
{
Thread thread1 = newThread(showClock);
thread1.Start();
Thread.Sleep(1000);
thread1.Abort();
label2.Text = j.ToString();
}
privatevoid showClock()
{
while (true)
j++;
}
یک ترد فعال شده و داخل حلقه این کارها را تکرار میکند
یک مقایسه و یک افزایش تا زمانی که این ترد را abort کنیم
و در قسمت اصلی زمانی که thread1 فعال شده ترد اصلی sleep شده به مدت یک ثانیه و بعد از یک ثانیه فعال شده thread1 رو از بین برده و شماره j را به ما نشان میدهد
به نظر شما چند مقایسه و افزایش رخ داده
در سیستم من حدود celeron 1.7 GH عدد j=97,695,356 یعنی در برنامه ای که شما نوشتین در 1 ثانیه اینقدر کار انجام شده توسط cpu داریم
حال به این نگاه کن
privatevoid button2_Click(object sender, EventArgs e)
{
Thread thread1 = newThread(showClock);
thread1.Start();
}
privatevoid showClock()
{
while (true)
{
Thread.Sleep(1);
labelwriter(DateTime.Now.TimeOfDay);
}
}
delegatevoidLableWriterDelegate(TimeSpan time);
publicvoid labelwriter(TimeSpan time)
{
LableWriterDelegate sb = newLableWriterDelegate(lableUpdate);
object[] args = newobject[1];
args[0] = time;
this.label2.Invoke(sb, args);
}
publicvoid lableUpdate(TimeSpan time)
{
label2.Text = time.ToString();
}
1000 بار در ثانیه lable2 رو update میکنیم ولی cpu usage من 5% رو نشون میده امتحانش کن حالا فهمیدی چرا سی پی یوت آمپر چسبونده