Làm thế nào để sử dụng hàm gettimeofday trong ngôn ngữ C?

How Use Gettimeofday Function C Language



Các gettimeofday () chức năng nhận thời gian đồng hồ của hệ thống. Thời gian hiện tại được biểu thị bằng giây và micro giây đã trôi qua kể từ 00:00:00, ngày 1 tháng 1 năm 1970 (Unix Epoch). Trong bài viết này, chúng tôi sẽ hướng dẫn bạn cách sử dụng gettimeofday () chức năng trong Linux. Vậy hãy bắt đầu.

Cú pháp

NSgettimeofday( cấu trúcthời gian*tp, cấu trúcMúi giờ*tz)

Các gettimeofday () chức năng được định nghĩa trong sys / time.h tập tin tiêu đề.







Tranh luận

Hàm này có hai đối số:



Cái 1NSđối số chỉ vào thời gian kết cấu. Các thời gian cấu trúc được khai báo như dưới đây trong sys / time.h tập tin tiêu đề :



cấu trúcthời gian{
time_t tv_sec; // được sử dụng trong giây
suseconds_t tv_usec; // được sử dụng cho micro giây
}

Cấu trúc thời gian cấu trúc biểu thị thời gian lịch. Nó có hai thành viên:





  • tv_sec : Là số giây kể từ kỷ nguyên.
  • tv_usec : Nó là micro giây bổ sung sau khi tính toán số giây kể từ kỷ nguyên. .

2NSđối số chỉ vào Múi giờ kết cấu. Nó thường phải được đặt thành NULL vì cấu trúc múi giờ Là lỗi thời. Đối số này chỉ dành cho khả năng tương thích ngược.

Trả lại giá trị

Về thành công, gettimeofday () trả về 0, nếu thất bại, hàm trả về -1.



Nhận thời gian và in đơn giản

#bao gồm
#bao gồm

NSchủ chốt() {
cấu trúctimeval current_time;
gettimeofday(&thời điểm hiện tại,VÔ GIÁ TRỊ);
printf ('giây:% ld micro giây:% ld ',
thời điểm hiện tại.tv_sec,thời điểm hiện tại.tv_usec);

trở lại 0;
}

Đầu ra:

Ở đây, sys / time.h đã được bao gồm cho gettimeofday () chức năng và cấu trúc thời gian. Các gettimeofday () hàm thiết lập thời gian trong thành viên cấu trúc timeval (current_time). tv_sec là số giây tích phân đã trôi qua kể từ khi bắt đầu Kỷ nguyên UNIX , vào nửa đêm UTC ngày 1 tháng 1 năm 1970 và tv_usec là số micro giây bổ sung trôi qua từ tv_sec. Nếu bạn chạy chương trình, bạn sẽ thấy kết quả đầu ra. Mỗi lần bạn chạy chương trình, đầu ra sẽ thay đổi.

Lỗi đối số NULL

#bao gồm
#bao gồm

NSchủ chốt() {

cấu trúctimeval current_time;
gettimeofday(VÔ GIÁ TRỊ,VÔ GIÁ TRỊ);
trở lại 0;
}

Đầu ra:

Trong ví dụ này cho thấy đối số đầu tiên của gettimeofday () hàm không được NULL. Cảnh báo biên dịch sẽ đến nếu đối số đầu tiên là NULL.

Ví dụ về định dạng thời gian hiện tại

#bao gồm
#bao gồm
#bao gồm

NSchủ chốt() {
cấu trúctruyền hình thời gian;
time_t t;
cấu trúctm*thông tin;
charđệm[64];

gettimeofday(&truyền hình,VÔ GIÁ TRỊ);
NS=truyền hình.tv_sec;

thông tin= giờ địa phương (&NS);
printf ('%NS', asctime (thông tin));
strftime (đệm, kích thướcđệm, 'Hôm nay là% A,% B% d. ',thông tin);
printf ('%NS',đệm);
strftime (đệm, kích thướcđệm, 'Giờ là% I:% M% p. ',thông tin);
printf ('%NS',đệm);

trở lại 0;
}

Đầu ra:

Trong ví dụ này cho thấy cách in Ngày và Giờ ở định dạng khác nhau. Không dễ dàng để biểu diễn các ngày từ giá trị trả về của gettimeofday () hàm số . Ở đây, giờ địa phương() strftime () các hàm được sử dụng để thể hiện một cách độc đáo giá trị trả về của gettimeofday () .

Các giờ địa phương() hàm nhận một đối số, là một tham chiếu đến một con trỏ của tv_sec lĩnh vực cấu trúc thời gian và trả về một tham chiếu đến một con trỏ của struct tm sự vật.

Các strftime () hàm sẽ tạo ra một chuỗi được định dạng, được cá nhân hóa hiển thị ngày và giờ từ struct tm con trỏ. Các chỉ định định dạng được sử dụng để hiển thị được định dạng. Ví dụ: chuỗi định dạng% d-% m-% Y% H:% M:% S chỉ định ngày và giờ trong biểu mẫu này:

04-14-2020 13:09:42

Sau đây là các thông số kỹ thuật chuyển đổi, có thể được sử dụng cho hiển thị được định dạng:

Bộ định danh Nghĩa
%đến Tên viết tắt của ngày trong tuần theo ngôn ngữ hiện tại.
%ĐẾN Tên của ngày trong tuần theo ngôn ngữ hiện tại.
% NS Tên của tháng viết tắt theo ngôn ngữ hiện tại.
% NS Tên của tháng đầy đủ theo ngôn ngữ hiện tại.
% NS Biểu diễn ưa thích của ngày và giờ cho ngôn ngữ hiện tại.
%NS Dưới dạng số thập phân cho ngày của tháng (phạm vi 01 - 31).
%NS Sử dụng 24 giờ (phạm vi 00 - 23) cho giờ dưới dạng số thập phân.
%TÔI Sử dụng 12 giờ (phạm vi 00 - 23) cho giờ dưới dạng số thập phân.
%NS Dưới dạng số thập phân cho ngày trong năm (phạm vi 001-366).
%NS Dưới dạng số thập phân của tháng (phạm vi 01 - 12).
%NS Số thập phân của phút.
%P Dựa trên giá trị thời gian được chỉ định, ‘am’ hoặc ‘pm’ hoặc các chuỗi tương đương cho ngôn ngữ hiện tại.
%NS Số thập phân của giây.
% NS Biểu diễn ưa thích của ngày cho ngôn ngữ hiện tại, nhưng không có thời gian.
% NS Biểu diễn ưu tiên của thời gian cho ngôn ngữ hiện tại, nhưng không có ngày.
%và Năm là số thập phân nhưng không có thế kỷ (phạm vi từ 00 - 99).
%VÀ Năm là số thập phân bao gồm cả thế kỷ.
%VỚI Múi giờ.

Sử dụng gettimeofday để đo thời gian thực hiện chương trình

#bao gồm
#bao gồm

NSchủ chốt() {

cấu trúcthời gian bắt đầu,kết thúc;
gettimeofday(&bắt đầu,VÔ GIÁ TRỊ);

(NStôi= 0;tôi<1e5 ;tôi++) {
}

gettimeofday(&kết thúc,VÔ GIÁ TRỊ);
printf ('Thời gian đếm đến 10 ^ 5 là:% ld micro giây ',
((kết thúc.tv_sec * 1000000 +kết thúc.tv_usec) -
(bắt đầu.tv_sec * 1000000 +bắt đầu.tv_usec)));

trở lại 0;
}

Đầu ra:

Ví dụ này cho thấy rằng cách gettimeofday () có thể được sử dụng để tính toán thời gian thực hiện của một chương trình.

Phần kết luận

Bằng cách này, gettimeofday () chức năng có thể được sử dụng trong Linux. Để chuyển mã hiện có, gettimeofday () chức năng có thể được sử dụng nhưng trong mã mới nó không nên được sử dụng. clock_gettime () chức năng có thể được sử dụng thay vì gettimeofday () .