จะใช้ฟังก์ชัน gettimeofday ในภาษา C ได้อย่างไร?

How Use Gettimeofday Function C Language



NS gettimeofday() ฟังก์ชันรับเวลานาฬิกาของระบบ เวลาปัจจุบันแสดงเป็นวินาทีและไมโครวินาทีที่ผ่านไปตั้งแต่ 00:00:00 น. 1 มกราคม 1970 (ยุค Unix) ในบทความนี้เราจะแสดงวิธีใช้ gettimeofday() ฟังก์ชันในลินุกซ์ มาเริ่มกันเลยดีกว่า

ไวยากรณ์

intgettimeofday( โครงสร้างtimeval*เมือง, โครงสร้างเขตเวลา*tz)

NS gettimeofday() ฟังก์ชั่นถูกกำหนดใน sys/time.h ไฟล์ส่วนหัว







ข้อโต้แย้ง

ฟังก์ชันนี้รับสองอาร์กิวเมนต์:



The 1เซนต์อาร์กิวเมนต์ชี้ไปที่ timeval โครงสร้าง. NS timeval โครงสร้างประกาศดังต่อไปนี้ใน sys/time.h ไฟล์ส่วนหัว:



โครงสร้างtimeval{
time_t tv_sec; // ใช้สำหรับวินาที
suseconds_t tv_usec; // ใช้สำหรับไมโครวินาที
}

โครงสร้าง timeval ของ struct แสดงถึงเวลาตามปฏิทิน มีสมาชิกสองคน:





  • tv_sec : คือจำนวนวินาทีนับตั้งแต่ยุค
  • tv_usec :เป็นไมโครวินาทีเพิ่มเติมหลังจากการคำนวณจำนวนวินาทีนับตั้งแต่ยุค .

2NSอาร์กิวเมนต์ชี้ไปที่ เขตเวลา โครงสร้าง. ปกติควรตั้งค่าเป็น NULL เพราะ โครงสร้างเขตเวลา ล้าสมัย อาร์กิวเมนต์นี้มีไว้สำหรับความเข้ากันได้แบบย้อนหลังเท่านั้น

ส่งคืนค่า

เมื่อประสบความสำเร็จ gettimeofday() คืนค่า 0 สำหรับความล้มเหลว ฟังก์ชันจะส่งกลับ -1



รับเวลาและพิมพ์อย่างง่าย

#รวม
#รวม

intหลัก() {
โครงสร้างtimeval current_time;
gettimeofday(&ปัจจุบัน_เวลา,โมฆะ);
printf ('วินาที : %ldNSไมโครวินาที : %ld',
ปัจจุบัน_เวลาtv_sec,ปัจจุบัน_เวลาtv_usec);

กลับ 0;
}

เอาท์พุท:

ที่นี่, sys/time.h ได้ถูกรวมไว้สำหรับ gettimeofday() ฟังก์ชันและโครงสร้างเวลา NS gettimeofday() ฟังก์ชั่นตั้งเวลาในสมาชิกโครงสร้าง timeval (current_time) tv_sec คือจำนวนเต็มของวินาทีที่ผ่านไปตั้งแต่เริ่มต้น ยุคยูนิกซ์ ในเวลาเที่ยงคืน UTC ของวันที่ 1 มกราคม 1970 และ tv_usec เป็นจำนวนไมโครวินาทีที่ผ่านไปจาก tv_sec เพิ่มเติม หากคุณเรียกใช้โปรแกรม คุณจะเห็นผลลัพธ์ ทุกครั้งที่คุณเรียกใช้โปรแกรม ผลลัพธ์จะเปลี่ยนไป

ข้อผิดพลาดอาร์กิวเมนต์ NULL

#รวม
#รวม

intหลัก() {

โครงสร้างtimeval current_time;
gettimeofday(โมฆะ,โมฆะ);
กลับ 0;
}

เอาท์พุท:

ในตัวอย่างนี้แสดงว่าอาร์กิวเมนต์แรกของ gettimeofday() ฟังก์ชันไม่ควรเป็น NULL คำเตือนการคอมไพล์จะเกิดขึ้นหากอาร์กิวเมนต์แรกเป็น NULL

การจัดรูปแบบเวลาปัจจุบันตัวอย่าง

#รวม
#รวม
#รวม

intหลัก() {
โครงสร้างทีวีจับเวลา;
time_t t;
โครงสร้างtm*ข้อมูล;
charกันชน[64];

gettimeofday(&โทรทัศน์,โมฆะ);
NS=โทรทัศน์.tv_sec;

ข้อมูล= เวลาท้องถิ่น (&NS);
printf ('%NS', asctime (ข้อมูล));
strftime (กันชน, ขนาดของกันชน, 'วันนี้คือ %A, %B %d.NS',ข้อมูล);
printf ('%NS',กันชน);
strftime (กันชน, ขนาดของกันชน, 'เวลาคือ %I:%M %pNS',ข้อมูล);
printf ('%NS',กันชน);

กลับ 0;
}

เอาท์พุท:

ในตัวอย่างนี้แสดงวิธีการพิมพ์วันที่และเวลาในรูปแบบต่างๆ ไม่ใช่เรื่องง่ายที่จะแสดงวันที่จากค่าส่งคืนของ gettimeofday() การทำงาน . ที่นี่, เวลาท้องถิ่น() และ strftime() ฟังก์ชั่นถูกใช้เพื่อแสดงค่าส่งคืนของ .อย่างสวยงาม gettimeofday() .

NS เวลาท้องถิ่น() ฟังก์ชันรับอาร์กิวเมนต์ ซึ่งเป็นการอ้างอิงถึงตัวชี้ของ tv_sec ที่ดินของ โครงสร้างเวลา และส่งคืนการอ้างอิงไปยังตัวชี้ของa โครงสร้าง TM วัตถุ.

NS strftime() ฟังก์ชันจะสร้างสตริงที่มีรูปแบบเฉพาะส่วนบุคคลซึ่งแสดงวันที่และเวลาจาก โครงสร้าง TM ตัวชี้ ตัวระบุรูปแบบใช้สำหรับการแสดงผลที่จัดรูปแบบ ตัวอย่างเช่น สตริงรูปแบบ %d-%m-%Y %H:%M:%S ระบุวันที่และเวลาในรูปแบบนี้:

04-14-2020 13:09:42

ต่อไปนี้คือตัวระบุการแปลงที่อาจใช้สำหรับการแสดงผลที่จัดรูปแบบ:

ตัวระบุ ความหมาย
%ถึง ชื่อย่อของวันทำงานตามสถานที่ปัจจุบัน
%ถึง ชื่อวันธรรมดาตามสถานที่ปัจจุบัน
% NS ชื่อของเดือนโดยย่อตามสถานที่ปัจจุบัน
% NS ชื่อของเดือนเต็มตามสถานที่ปัจจุบัน
% ค การแสดงวันที่และเวลาที่ต้องการสำหรับสถานที่ปัจจุบัน
%NS เป็นเลขฐานสิบสำหรับวันของเดือน (ช่วง 01 – 31)
%ชม ใช้ 24 ชั่วโมง (ช่วง 00 – 23) ถึงชั่วโมงเป็นเลขฐานสิบ
%ผม ใช้ 12 ชั่วโมง (ช่วง 00 – 23) ถึงชั่วโมงเป็นเลขฐานสิบ
%NS เป็นเลขฐานสิบสำหรับวันของปี (ช่วง 001-366)
%NS เป็นเลขฐานสิบของเดือน (ช่วง 01 – 12)
%NS เลขทศนิยมของนาที
%NS ตามค่าเวลาที่ระบุ ไม่ว่าจะเป็น 'am' หรือ 'pm' หรือสตริงที่เทียบเท่าสำหรับสถานที่ปัจจุบัน
%NS เลขทศนิยมของวินาที
% NS การแสดงวันที่ที่ต้องการสำหรับสถานที่ปัจจุบัน แต่ไม่มีเวลา
% NS การแสดงเวลาที่ต้องการสำหรับสถานที่ปัจจุบัน แต่ไม่มีวันที่
%และ ปีเป็นทศนิยมแต่ไม่มีศตวรรษ (ตั้งแต่ 00 – 99)
%และ ปีเป็นทศนิยมรวมทั้งศตวรรษ
%กับ เขตเวลา

ใช้ gettimeofday เพื่อวัดเวลาดำเนินการโปรแกรม

#รวม
#รวม

intหลัก() {

โครงสร้างช่วงเวลาเริ่มต้น,จบ;
gettimeofday(&เริ่ม,โมฆะ);

สำหรับ (intผม= 0;ผม<1e5 ;ผม++) {
}

gettimeofday(&จบ,โมฆะ);
printf ('เวลาที่ใช้นับถึง 10^5 คือ: %ld micro secondsNS',
((จบ.tv_sec * 1000000 +จบ.tv_usec) -
(เริ่ม.tv_sec * 1000000 +เริ่ม.tv_usec)));

กลับ 0;
}

เอาท์พุท:

ตัวอย่างนี้แสดงให้เห็นว่าวิธีการ gettimeofday() ฟังก์ชันอาจใช้สำหรับคำนวณเวลาดำเนินการของโปรแกรม

บทสรุป

ด้วยวิธีนี้ gettimeofday() ฟังก์ชันอาจถูกใช้ในลินุกซ์ สำหรับการย้ายรหัสที่มีอยู่ คำสั่ง gettimeofday() อาจใช้ฟังก์ชันได้ แต่ในโค้ดใหม่ไม่ควรใช้ clock_gettime() สามารถใช้ฟังก์ชันแทน gettimeofday() .