مشاهده نسخه کامل
: ميلي ثانيه ميلي ثانيه
سلام دوستان
کسی میدونه چجوری میشه میلی ثانیه میلی ثانیه به یه عدد اضافه کرد و ان را در زبان سی نشون داد؟؟؟
مثلا در کرنومتر میلی ثانیه میلی ثانیه اضافه میشه
خودم با دستورsleep نوشتم ولی اون مقدار صحیح قبول میکنه نه مقدار اعشاری...
ایا تو سی دستور delay کاربرد داره؟؟؟
ایا دستور دیگری وجود داره میلی ثانیه میلی ثانیه به یه عدد اضافه کنه؟؟؟
با تشکر از دوستان
دستور sleep میلی ثانیه میگیره، ثانیه که نمیگیره...
afceaglee2013
04-01-2011, 23:33
sleep ثانیه میگیره .. در اکثر زبان ها اینجوریه .. حالا شاید ورژنی که شما استفاده میکنی فرق داره
---
احتمالا شما از توربو سی 4.5 استفاده میکنید که delay رو نمیشناسه به هر حال این کد تابع delay رو با استفاده از هیدر time.h شبیه سازی کرده و میتونید به تابع ssleep ورودی میلی ثانیه بدید ..
/* sleep example */
#include <time.h>
#include <stdio.h>
void ssleep(unsigned int mseconds)
{
clock_t goal = mseconds*CLK_TCK/1000 + clock();
while (goal > clock());
}
int main(void)
{
int i;
for (i=1; i<5; i++)
{
printf("Sleeping for %d seconds\n", i);
ssleep(1000);
}
return 0;
}
sleep ثانیه میگیره .. در اکثر زبان ها اینجوریه .. حالا شاید ورژنی که شما استفاده میکنی فرق داره
---
احتمالا شما از توربو سی 4.5 استفاده میکنید که delay رو نمیشناسه به هر حال این کد تابع delay رو با استفاده از هیدر time.h شبیه سازی کرده و میتونید به تابع ssleep ورودی میلی ثانیه بدید ..
/* sleep example */
#include <time.h>
#include <stdio.h>
void ssleep(unsigned int mseconds)
{
clock_t goal = mseconds*CLK_TCK/1000 + clock();
while (goal > clock());
}
int main(void)
{
int i;
for (i=1; i<5; i++)
{
printf("Sleeping for %d seconds\n", i);
ssleep(1000);
}
return 0;
}
دوست عزیز
من از توربو سی 5.2 استفاده می کنم
با استفاده از هیدر time.h دستور delayو ssleep اعلام میکنه که نمی تونه صدا کنه
اگه من بخوام یه نوشته رو یک دهم ثانیه نشون بدم الگوریتمش چی میشه؟؟
میشه در مورد کد زیر یکم توضیح بدی؟؟؟
void ssleep(unsigned int mseconds)
{
clock_t goal = mseconds*CLK_TCK/1000 + clock();
while (goal > clock());
}
دوست عزیز میشه در مورد تابع زیر یکم توضیح بدی؟؟؟
void ssleep(unsigned int mseconds)
{
clock_t goal = mseconds*CLK_TCK/1000 + clock();
while (goal > clock());
}
afceaglee2013
10-01-2011, 19:48
تابع clock() تعداد تیک هایی که از اجرای برنامه میگذره رو نشون میده .. تعداد تیک ها (پالس ها) بستگی به ورژن برنامه داره که در سی های تحت داس 12 و در سی های تحت ویندوز 1000 هستش
ثابت CLK_TCK که در هیدر time.h وجود داره همون تعداد پالس ها در ثانیه رو در خودش داره
مقداری که ما دارم بر حسب میلی ثانیه س و باید تبدیل به پالس کنیم قبل از اینکه تبدیل به پالس کنیم میلی ثانیه رو تبدیل به ثانیه میکنیم (mseconds/1000) و سپس این مقدار رو که بر حسب ثانیه س با کمک CLK_TCK این مقدار رو تبدیل به پالس میکنیم ( mseconds*CLK_TCK/1000) .. حالا برنامه باید به اندازه ی این مقدار ( mseconds*CLK_TCK/1000) معطل بشه
تابع clock() در اول فرا خوانی میشه تا معلوم بشه از اول برنامه چند پالس سپری شده و تعداد پالس هایی رو هم که باید سپری بشه به این مقدار اضافه میکنیم و در متغییر goal ذخیره میکنیم .. داخل حلقه ی while مدام بررسی میشه که تعداد پالس ها به مقدار مورد نظر رسیده یا نه ...
lordhippo
12-01-2011, 02:12
استفاده از sleep و delay برا اینکار اشتباهه.
چون شما فرضاً 1ms صبر کردی، بعد می خوای زمان رو چاپ کنی که خودش وقت میگیره. اینجوری مثلاً بین هر دو تا چاپ 1.2ms ( خیلی اغراق کردم ) زمان میگذره، در حالی که انتظار شما 1ms بوده. اینجوری بعد 10 دقیقه زمانی که برنامه شما میگه گذشته با زمان سپری شده واقعی خیلی فرق پیدا میکنه.
بجای sleep از clock یا time استفاده کن تا مقدار مطلق ( absolute ) زمان رو بگیری و چاپ کنی.
حالا می تونی با یه delay ه یه میلی ثانیه این کارو انجام بدی.
مثلاً:
...
while ( ... )
{
sleep ( 1 )
cout << time_ms ( );
}
...
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.