2012-04-11 50 views
6

Sự tương đương của số System.currentTimeMillis() của Java trong C là gì?Nhận thời gian hiện tại, tính bằng mili giây, tính bằng C?

+4

Hệ điều hành nào? –

+1

Xem http://stackoverflow.com/questions/5303751/current-microsecond-time-in-c. Câu trả lời tốt ở đó. – netcoder

+1

Có thể trùng lặp của [Cách đo thời gian bằng mili giây bằng ANSI C?] (Http://stackoverflow.com/questions/361363/how-to-measure-time-in-milliseconds-using-ansi-c) –

Trả lời

2

Kiểm tra time.h, có lẽ giống như gettimeofday() chức năng.

Bạn có thể làm một cái gì đó giống như

struct timeval now; 
gettimeofday(&now, NULL); 

Sau đó, bạn có thể trích xuất thời gian bằng cách nhận các giá trị từ now.tv_secnow.tv_usec.

+1

không , nhưng

1

Có chức năng time() nhưng trả về giây, không phải là mili giây. Nếu bạn cần độ chính xác cao hơn, bạn có thể sử dụng các chức năng nền tảng cụ thể như Windows GetSystemTimeAsFileTime() hoặc * nix's gettimeofday().

Nếu bạn không thực sự quan tâm về ngày và thời gian nhưng chỉ muốn thời gian khoảng cách giữa hai sự kiện, như thế này:

long time1 = System.currentTimeMillis(); 
// ... do something that takes a while ... 
long time2 = System.currentTimeMillis(); 
long elapsedMS = time2 - time1; 

thì C tương đương là clock(). Trên Windows, việc sử dụng GetTickCount() là phổ biến hơn cho mục đích này.

3

Trên Linux và các hệ thống giống Unix khác, bạn nên sử dụng clock_gettime(CLOCK_MONOTONIC). Nếu tính năng này không khả dụng (ví dụ: Linux 2.4), bạn có thể quay lại gettimeofday(). Sau này có nhược điểm bị ảnh hưởng bởi điều chỉnh đồng hồ.

Trên Windows, bạn có thể sử dụng QueryPerformanceCounter().

This code của tôi tóm tắt tất cả những điều trên thành một giao diện đơn giản trả về số mili giây dưới dạng int64_t. Lưu ý rằng giá trị mili giây được trả lại chỉ dành cho việc sử dụng tương đối (ví dụ: thời gian chờ) và không liên quan đến bất kỳ thời điểm cụ thể nào.

+0

'CLOCK_MONOTONIC' không hoàn toàn tương đương với hàm java, vì hàm java cũng bị ảnh hưởng bởi các điều chỉnh xung quanh. Đó là sự lựa chọn đúng cho bộ định thời gian, tất nhiên, nhưng nếu OP muốn một thời gian wallclock nó sẽ không giúp đỡ. – bdonlan

Các vấn đề liên quan