ขออ้างไว้ก่อนว่า วิธีการนี้เป็น platform specific POSIX สำหรับ linux/unix นะครับ สำหรับ window ผมแนะนำดู เว็ปนี้ครับ

ปกติเวลาเราวัดค่า elapsed time สำหรับ appliction ที่ไม่ต้องการ precision สูง เราจะใช้ฟังก์ชั่น clock() ธรรมดา ๆที่ระบุไว้ใน time.h ที่เป็นมาตรฐาน ANSI C แต่จะให้ค่า precision ที่ต่ำมาก(ระดับ milli second) เท่านั้น ถ้าเราต้องการ ความแม่นยำสูงขึ้นเราก็จะต้องมองหาฟังก์ชั่นอื่นมาทดแทน

ในที่นี้เราจะใช้ ฟังก์ชั่น gettimeofday() ซึ่งให้ precision สูงในระดับ microsecond ( 1 / 10^12 second)   ครับ โดย header file ที่ใช้ก็คือ sys/time.h ครับ

ยกตัวอย่าง code เลยนะครับ

#include <stdio.h>
#include <sys/time.h>

void main()
{
     struct timeval t1,t2;

     gettimeofday(&t1, NULL);

     // ประมวลผลบางอย่าง
 gettimeofday(&t2, NULL);
printf("elapsed  = %d seconds , %d microseconds\n", t2.tv_sec- t1.tv_sec
, t2.tv_usec - t1.tv_usec);
}

tv_sec ให้ค่าออกมาเป็น second ครับ
ส่วน tv_usec นั้น precision อยู่ในระรับ micro

คิดว่าคงจะเป็นประโยชน์กับหลายๆท่านที่ต้องการเขียนโปรแกรมที่ต้องการวัดประสิทธิภาพในระดับสูงนะครับ

Advertisements

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s