PDA

View Full Version : زمان اجرا



نغمه
پنج شنبه 10 شهریور 1384, 11:28 صبح
اگر بخوام زمان اجرای یک برنامه در محیط c را بدست بیارم چه کدی باید به انتهای این برنامه اضافه کنم با در خروجی زمان اجرا را به من بده
لطفا زود جوابم بدین خیلی عجله دارم

نغمه
پنج شنبه 10 شهریور 1384, 13:02 عصر
دستوری در C هست که زمان را به یک هزارم یا یک ده هزارم ثانیه بده؟

Reza_K
پنج شنبه 10 شهریور 1384, 21:23 عصر
در ابتدای برنامه:

int startTime = GetTickCount();
....
در انتهای برنامه:

int endTime = GetTickCount();

زمان اجرا(در واحد میلی ثانیه):
startTime - endTime

از Platform SDK استفاده کنید.

نغمه
پنج شنبه 10 شهریور 1384, 23:16 عصر
دستورات بالا را به برنامه ام اضافه کردم موقع اجرا خطای زیر را میدهد :
call to undefind function "Get Tick Count"
ضمنا منظورتون از platform SDK چیه؟

Blaster
جمعه 11 شهریور 1384, 10:55 صبح
برای استفاده از تابع () GetTickCountشما باید Windows.h رو در برنامه include کنید و این یعنی شما باید از کامپایلرهای C تحت Windows استفاده کنید.
نیازی هم به SDK ندارید.
اما در C استاندارد شما می تونید به صورت زیر عمل کنید :


//#include <time.h>
time_t start,end;
double diff;

time(&start);
// .
// ..
// ...
time(&end);
diff = difftime(end ,start);

که در حد ثانیه عمل می کنه.

نغمه
جمعه 11 شهریور 1384, 11:57 صبح
من کد اقای reza_k را همراه با windows.h به برنامه ام اضافه کردم و برنامه هم اجرا شد ولی زمان اجرا را صفر داد اگر این کد زمان اجرا را به واحد میلی ثانیه می دهد نباید زمان اجرا صفر بشه

نغمه
جمعه 11 شهریور 1384, 12:06 عصر
زمان endtime و starttime را در خروجی مساوی نشان می ده فکر می کنم من به کدی احتیاج دارم که زمان اجرا را در واحد یک ده هزام ثاینه بده . آیا چنین کدی وجود داره؟

Reza_K
جمعه 11 شهریور 1384, 13:56 عصر
زمان endtime و starttime را در خروجی مساوی نشان می ده فکر می کنم من به کدی احتیاج دارم که زمان اجرا را در واحد یک ده هزام ثاینه بده . آیا چنین کدی وجود داره؟

در سیستم عامل windows که از نوع real time نمی‌باشد دستیابی به دقت مورد نظر شما غیر ممکن است. شاید با ایجاد تاخیر مجازی با استفاده از تابعی چون Sleep یا حلقه های تهی(به شرط از کار انداختن optimizer ) بتوانید به نتایجی برسید.

seyedof
شنبه 12 شهریور 1384, 00:57 صبح
سلام
معمولا اندازه گیری سرعت برای تعداد تکرار بالا معنی دارد نه مثلا اندازه گیری زمان اجرای حلقه ای که ۱۰ یا صد یا حتی ۱۰۰۰ بار اجرا میشه مگر در مواردی خاص که در اوون هم زمان رو اندازه نمیگیرند بلکه تعداد سیکل های cpu clock رو می شمرند. ضمن اینکه هرچه زمان اجرا بیشتر بشه زمان اندازه گیری شده دقیقتر خواهد بود.
ضمنا برخلاف چیزی که برخی از دوستان عنوان کردند در ویندوز زمان با دقت در حد میکروثانیه هم داریم و محدود به میلی ثانیه نیست. به جای تایع GetTickCount باید از تابع QueryPerformanceCounter استفاده کنید.

ممنون علی

Reza_K
شنبه 12 شهریور 1384, 01:46 صبح
بدون شک اینطوره!

با دقت 0.8 میکرو ثانیه: http://www.bbdsoft.com/downloads/win32/profiler.zip

نغمه
شنبه 12 شهریور 1384, 08:23 صبح
طبق گفته seyedof از تابع QueryPerformanceCounter استفاده کردم ولی موقع اجرا خطای زیر را می دهد
too few parameters in call to ' stdcall QueryPerformanceCounter(LARGE INTEGER *) '
علت این خطا چیه ؟
آیا برای این هم باید windows.h را include کنم ؟
اگر بخوام بجای محاسبه زمان اجرا تعداد سیکلهای cpu را بشمرم باید از چه کدی استفاده کنم؟

seyedof
شنبه 12 شهریور 1384, 19:19 عصر
سلام
پیغامی که داده یعنی اینکه این تابع به پارامتری نیاز داره که شما براش نفرستادید. شما باید برای این تابع یک اشاره گر به LARGE_INTEGER بفرستید. ضمنا تا جایی که من میدونم این تابع همون تعداد سیکل cpu رو میده. برای بدست آوردن زمان باید بر فرکانس سیستم تقسیمش کنید.
در این مورد یک مقاله توی مجله دنیای کامپیوتر و ارتباطات نوشته بودم. سایت www.ccwmagazine.com
ممنون علی

نغمه
یک شنبه 13 شهریور 1384, 10:02 صبح
سلام
پیغامی که داده یعنی اینکه این تابع به پارامتری نیاز داره که شما براش نفرستادید. شما باید برای این تابع یک اشاره گر به LARGE_INTEGER بفرستید. ضمنا تا جایی که من میدونم این تابع همون تعداد سیکل cpu رو میده. برای بدست آوردن زمان باید بر فرکانس سیستم تقسیمش کنید.
در این مورد یک مقاله توی مجله دنیای کامپیوتر و ارتباطات نوشته بودم. سایت www.ccwmagazine.com
ممنون علی

میشه کدش را برام بنویسید

نغمه
یک شنبه 13 شهریور 1384, 10:03 صبح
سلام
پیغامی که داده یعنی اینکه این تابع به پارامتری نیاز داره که شما براش نفرستادید. شما باید برای این تابع یک اشاره گر به LARGE_INTEGER بفرستید. ضمنا تا جایی که من میدونم این تابع همون تعداد سیکل cpu رو میده. برای بدست آوردن زمان باید بر فرکانس سیستم تقسیمش کنید.
در این مورد یک مقاله توی مجله دنیای کامپیوتر و ارتباطات نوشته بودم. سایت www.ccwmagazine.com
ممنون علی

میشه کدش را برام بنویسید
مقالتون را چه جوری باید از این سایت پیدا کرد