bazen timespec
ve süreleri olarak kullanılan timeval
, kimi zamanlar ben onları zaman noktaları olarak kullanılan bakınız. Ne tür değerler tuttuğunuzu bilmek zorundasınız. <chrono>
'da bu iki kavram farklı tiplerdir.
bir süre zaman bir miktardır: Bir kronometre ile ölçüm bir şey. Örnek süreler 2 dakika, 3 saniye, 4 saat ve 16 yıldır.
bir zaman noktası, belirli bir zamanı: Bilgisayarımı başlattım 14:00 14 Temmuz 2015 EDT veya 6 saat beri. Bir zaman noktasında onunla ilişkili zımni bir dönem vardır. Bir dönem, zamanı ölçtüğünüz köken üzerinde sadece karşılıklı olarak anlaşılan bir miktardır.
sizin timespec
bir süreyi tutarsa:
senin
timespec
bir zaman noktasında duruyor
timespec ts = {3, 123}; // 3 seconds + 123 nanoseconds
auto d = std::chrono::seconds{ts.seconds}
+ std::chrono::nanoseconds{ts.nanoseconds};
varsa, devrin bilmek zorunda. Dönem artık saniye (bu Unix time olan) ihmal, 1970-01-01 00:00:00 UTC olduğu muhtemeldir. Eğer öyleyse, bir std::chrono::system_clock::time_point
içine koyabilirsiniz. Bu tip bu devrin için garanti değil ama her uygulama yapar:
d
yukarıdaki gibi hesaplanır
using namespace std::chrono;
system_clock::time_point tp{duration_cast<system_clock::duration>(d)};
.
timeval
'unuz varsa, nanoseconds
'u kullandığım microseconds
kullanın.
high_resolution_clock
veya steady_clock
time_points öğelerini portably kullanamazsınız, çünkü farklı uygulamalar bu türler için farklı dönemlere sahiptir. Ayrıca
Eğer timeval
kullanıyorsanız, pratikte duration_cast
d
dolaylı system_clock::duration
tüm uygulamalara dönüştürecek süresi gibi gereksiz hale gelir: Eğer gerekirse emin değilseniz
using namespace std::chrono;
system_clock::time_point tp{d};
duration_cast
veya değil, onsuz deneyin. Eğer derlerse, buna ihtiyacınız olmaz. Derleme zamanı hatası alırsanız, buna ihtiyacınız var. Süreleri dönüştürürken gereklidir ve tam bir dönüşüm yoktur.
'Std :: krono :: system_clock' kolaylık yöntemleri' from_time_t' ve 'to_time_t' sahiptir. Bunlar, time_points’den bahsediyorsak daha taşınabilir bir dönüşüm sağlamalı. – user666412
@ user666412: Evet. Ben from_time_t' ve 'to_time_t' C++ 11’e koydum.:-) Ne yazık ki 'time_t' genellikle hem integral hem de saniyeyi temsil ederken, 'timespec' ve' timeval' birimleri bir saniyeden daha iyi temsil eder. Yani, 'to/from_time_t' ifadesi, hassaslığınızı saniyelerle kesmeniz ve daha sonra bu hassasiyeti bir şekilde düzeltmeniz gerektiği anlamına gelir. Sizinle benim aramda, "to/from_time_t" nin yararı, uygulayıcıları "system_clock" için UnixTime "standardını" kullanmaya teşvik etmesidir. :-) –
İlginç gerçek. Paylaşım için teşekkürler. Sadece 'to/from_time_t' çağını ayarlamak için taşınabilir bir yol olarak düşündüm, çünkü bu uygulama özel olabilir ve saniyeler kesirleri süre ile yaptığınız gibi eklenebilir. – user666412