PDA

View Full Version : اجرای کد بصورت میلی ثانیه در ساعت مشخصی



remower
شنبه 08 شهریور 1399, 21:37 عصر
با nodatime
تایم بصورت
HH:m:s:fff
یه کدی تو میلی ثانیه یک تایم مدنظرمون اجرا بشه
بعنوان مثال در ساعت 12:20:10:250 و 12:20:10:580 در ثانیه 10، دو بار کد در میلی ثانیه 250 و 580 اجرا بشه یعنی در یک ثانیه طبق میلی ثانیه که مشخص میکنیم دوبار کد اجرا بشه

if (label1.text=="12:20:10:250){
کد
}


if (label1.text=="12:20:10:580){
کد
}

کد در کنترل تایمر رو یک میلی قرار دادم ولی هیچ اتفاقی نمیفته ک انگار از این میلی ثانیه میگذره توان اجرا در میلی ثانیه رو نداره
ولی با ثانیه مشکلی نداره

مهدی کرامتی
یک شنبه 09 شهریور 1399, 12:54 عصر
تایمر پیش فرض خود Windows Forms دقتش بسیار کمه و نمی تونه زمان های زیر یک ثانیه رو درست هندل کنه.

اینجا (https://www.nimaara.com/high-resolution-clock-in-net/) را ببینید.

remower
یک شنبه 09 شهریور 1399, 14:54 عصر
تایمر پیش فرض خود Windows Forms دقتش بسیار کمه و نمی تونه زمان های زیر یک ثانیه رو درست هندل کنه.

اینجا (https://www.nimaara.com/high-resolution-clock-in-net/) را ببینید.

آقای کرامتی بابت کمک سری قبلی در مورد ساعت nodatime ممنونم که معرفی کردین کارم شد مشکل با تایم و اجرای اون ندارم چون تایم با nodatime دقیق تر از ساعت سیستم هس . مشکل اینه که کنترل تایمر همونطور که خودتون گفتین زیر یک ثانیه یعنی در اجرای کد در میلی ثانیه ها دقت زیادی نداره من اگه میلی ثانیه رو در تایم تنها HH:m:s:f قرار بدم یه میلی ثانیه تک رقمی باشه کنترل تایمر جواب میده برای اجرای کد ولی اگه تایم رو بصورت HH:m:s:fff قرار بدم براحتی تایمر از میلی ثانیه ک سه رقمیه عبور میکنه و کدی ک میخام رو اجرا نمیکنه حالا چون من if رو لیبل قرار دادم ک تو زمانی ک مشخص کردم کد اجرا بشه و اینکه از کتابخونه nodatime استفاده میکنم کنترل تایمر دقیقی نیست که بتونه کدها رو در میلی ثانیه های سه رقمی fff بخوبی و دقیق اجرا کنه؟
اون لینک رو نگاه کردم ولی طرز استفاده ازش رو درست نفهمیدم ک چطور باید با nodatime هماهنگش کنم

مهدی کرامتی
یک شنبه 09 شهریور 1399, 16:42 عصر
نیازی به هماهنگ کردن اون کتابخانه با NodaTime نیست، چون کار اولی فقط بدست آوردن زمان آنلاین است و خروجی رو در نهایت در قالب DateTime ارائه میده و در اون نقطه کارش تمام میشه.

کدی که لینک دادم با استفاده از StopWatch و کلاسهای مشابه کار می کنه، بنابراین می تونه در حد میکروثانیه پاسخ بده.

remower
یک شنبه 09 شهریور 1399, 23:09 عصر
متاسفانه به اون نتیجه دلخواه نرسیدم هنگ میکنه و این که بدون ایف لیبل که بالا نوشتم کار میکنه واقعا عجیبه کنترل تایمر با اینکه interval = 1 قرار دادم از میلی ثانیه سه رقمی عبور میکنه و کاری نمیکنه چون من طبق ساعت دقیقه ثانیه و میلی ثانیه آنلاین میخوام کدی اجرا بشه stopwatch جواب نمیده و بقیه coundown time ها هم با sleep هس ک برنامه رو یجورایی ب حالت هنگ درمیاره

remower
یک شنبه 09 شهریور 1399, 23:13 عصر
کلا راهی نیست که مثلا بشه طبق ساعت مثلا همین nodatime
HH:m:s:fff رو در ساعت بعنوان مثال 23:10:00:154 یه کدی اجرا کرد اینجا مشکل اصلی میلی ثانیه هس که تایمر از رو لیبل بصورت ایف چون سه رقمیه fff نمیخونه

daniyaltjm
دوشنبه 10 شهریور 1399, 00:54 صبح
اینو مینویسم دقیق نیست شاید ولی کار میکنه!


private void timer1_Tick(object sender, EventArgs e)
{
label1.Text = DateTime.Now.ToString("hh:mm:ss:fff ");



if (DateTime.Now.ToString("HH:mm:ss:fff").Substring(0, 2) == "01" && DateTime.Now.ToString("HH:mm:ss:fff").Substring(3, 2) == "22"&& DateTime.Now.ToString("HH:mm:ss:fff").Substring(6, 2) == "00"&&DateTime.Now.ToString("HH:mm:ss:fff").Substring(9,1) == "2")
{
label2.Text = "yes";
}
if (DateTime.Now.ToString("HH:mm:ss:fff").Substring(0, 2) == "01" && DateTime.Now.ToString("HH:mm:ss:fff").Substring(3, 2) == "22" && DateTime.Now.ToString("HH:mm:ss:fff").Substring(6, 2) == "00" && DateTime.Now.ToString("HH:mm:ss:fff").Substring(9, 1) == "5")
{
label3.Text = "no";


}


}