نوشته شده توسط
majid zarei
...آیا این برنامه شما برای زمان 1 میلی ثانیه هم کار میکند؟ برای این سوال را پرسیدم جون به نظر برنامه شما به صورت consol است و برنامه من در windows form می باشد...
البته از بابت فرم و کنسول بودن که اصولاً نباید تفاوتی بکنه؛ ولی مطمئناً شما برای Interval یک میلی ثانیه نمیتونید از هیچکدوم از کلاسهای Timer دات نت استفاده کنید؛ در پست قبلی من یه لینک دادم برای MicroTimer که اینجا کدش رو میذارم همراه با خروجی (ضمیمه رو ببینید)؛ ولی بازهم امکان اشتباه (هرچند خیلی کمتر و درحد میکروثانیه!) هست، که ممکنه در کار شما اختلال ایجاد کنه:
static void Main(string[] args)
{
Program program = new Program();
program.MicroTimerTest();
}
private void MicroTimerTest()
{
// Instantiate new MicroTimer and add event handler
MicroLibrary.MicroTimer microTimer = new MicroLibrary.MicroTimer();
microTimer.MicroTimerElapsed +=
new MicroLibrary.MicroTimer.MicroTimerElapsedEventHand ler(OnTimedEvent);
microTimer.Interval = 1000; // Call micro timer every 1000µs (1ms)
// Can choose to ignore event if late by Xµs (by default will try to catch up)
// microTimer.IgnoreEventIfLateBy = 500;
microTimer.Enabled = true; // Start timer
// Do something whilst events happening, for demo sleep 2000ms (2sec)
System.Threading.Thread.Sleep(2000);
microTimer.Enabled = false; // Stop timer
// Wait for user input
Console.ReadLine();
}
private void OnTimedEvent(object sender,
MicroLibrary.MicroTimerEventArgs timerEventArgs)
{
// Do something small that takes significantly less time than Interval
Console.WriteLine(string.Format(
"Count = {0:#,0} Timer = {1:#,0} µs | " +
"LateBy = {2:#,0} µs | ExecutionTime = {3:#,0} µs",
timerEventArgs.TimerCount, timerEventArgs.ElapsedMicroseconds,
timerEventArgs.TimerLateBy, timerEventArgs.CallbackFunctionExecutionTime));
}
و قسمتی از نتیجه:
Count = 1 Timer = 1,000 µs | LateBy = 0 µs | ExecutionTime = 129 µs
Count = 2 Timer = 2,732 µs | LateBy = 732 µs | ExecutionTime = 1,731 µs
Count = 3 Timer = 3,000 µs | LateBy = 0 µs | ExecutionTime = 768 µs
Count = 4 Timer = 4,000 µs | LateBy = 0 µs | ExecutionTime = 25 µs
Count = 5 Timer = 5,000 µs | LateBy = 0 µs | ExecutionTime = 14 µs
Count = 6 Timer = 6,000 µs | LateBy = 0 µs | ExecutionTime = 12 µs
Count = 7 Timer = 7,000 µs | LateBy = 0 µs | ExecutionTime = 14 µs
Count = 8 Timer = 8,000 µs | LateBy = 0 µs | ExecutionTime = 14 µs
Count = 9 Timer = 9,000 µs | LateBy = 0 µs | ExecutionTime = 12 µs
Count = 10 Timer = 10,000 µs | LateBy = 0 µs | ExecutionTime = 11 µs
Count = 11 Timer = 11,000 µs | LateBy = 0 µs | ExecutionTime = 12 µs
Count = 12 Timer = 12,000 µs | LateBy = 0 µs | ExecutionTime = 12 µs
Count = 13 Timer = 13,000 µs | LateBy = 0 µs | ExecutionTime = 61 µs
Count = 14 Timer = 14,000 µs | LateBy = 0 µs | ExecutionTime = 18 µs
Count = 15 Timer = 15,000 µs | LateBy = 0 µs | ExecutionTime = 12 µs
Count = 16 Timer = 16,000 µs | LateBy = 0 µs | ExecutionTime = 12 µs
Count = 17 Timer = 17,000 µs | LateBy = 0 µs | ExecutionTime = 11 µs
Count = 18 Timer = 18,000 µs | LateBy = 0 µs | ExecutionTime = 12 µs
Count = 19 Timer = 19,000 µs | LateBy = 0 µs | ExecutionTime = 64 µs
Count = 20 Timer = 20,000 µs | LateBy = 0 µs | ExecutionTime = 23 µs
Count = 21 Timer = 21,000 µs | LateBy = 0 µs | ExecutionTime = 12 µs
Count = 22 Timer = 22,000 µs | LateBy = 0 µs | ExecutionTime = 36 µs
Count = 23 Timer = 23,000 µs | LateBy = 0 µs | ExecutionTime = 12 µs
Count = 24 Timer = 24,000 µs | LateBy = 0 µs | ExecutionTime = 35 µs
Count = 25 Timer = 25,000 µs | LateBy = 0 µs | ExecutionTime = 15 µs
Count = 26 Timer = 26,000 µs | LateBy = 0 µs | ExecutionTime = 12 µs
Count = 27 Timer = 27,000 µs | LateBy = 0 µs | ExecutionTime = 12 µs
Count = 28 Timer = 28,000 µs | LateBy = 0 µs | ExecutionTime = 12 µs
Count = 29 Timer = 29,000 µs | LateBy = 0 µs | ExecutionTime = 21 µs
Count = 30 Timer = 30,000 µs | LateBy = 0 µs | ExecutionTime = 18 µs
Count = 31 Timer = 31,000 µs | LateBy = 0 µs | ExecutionTime = 37 µs
Count = 32 Timer = 32,000 µs | LateBy = 0 µs | ExecutionTime = 14 µs
Count = 33 Timer = 33,000 µs | LateBy = 0 µs | ExecutionTime = 15 µs
...
ضمناً من این رو نفهمیدم:
...برای تست من از ساعت استفاده نکردم بلکه در event تایمر ، عددی روی پورت سریال می نوشتم و خروجی را با اسکوپ نگاه کردم...
چطور میشه از ساعت استفاده کرد! شما میتونید هریک از این property ها رو به اسیلوسکوپ بفرستید تا نتیجه دقیقتر بدست بیارین :
- ElapsedMicroseconds
- TimerLateBy
- CallbackFunctionExecutionTime
موفق باشید./