जहाँ तक मुझे पता है, बीते हुए समय को मापने के कम से कम दस तरीके हैं:
मोनोटोनिक घड़ी आधारित:
ProcessInfo.systemUptime
।
mach_absolute_time
साथ mach_timebase_info
के रूप में में वर्णित इस जवाब ।
clock()
में POSIX मानक ।
times()
में POSIX मानक । (तब से जटिल है जब हमें उपयोगकर्ता-समय बनाम सिस्टम-टाइम पर विचार करने की आवश्यकता होती है, और बच्चे प्रक्रिया में शामिल होते हैं।)
DispatchTime
(स्वीकार समय एपीआई के आसपास एक आवरण) जेरेमीप द्वारा स्वीकार किए जाते हैं।
CACurrentMediaTime()
।
दीवार घड़ी आधारित:
(कभी भी मैट्रिक्स के लिए उन का उपयोग न करें: नीचे देखें क्यों)
NSDate
/ Date
जैसा कि दूसरों द्वारा उल्लेख किया गया है।
CFAbsoluteTime
जैसा कि दूसरों द्वारा बताया गया है।
DispatchWallTime
।
gettimeofday()
में POSIX मानक ।
विकल्प 1, 2 और 3 नीचे विस्तृत हैं।
विकल्प 1: फाउंडेशन में प्रोसेस इंफो एपीआई
do {
let info = ProcessInfo.processInfo
let begin = info.systemUptime
// do something
let diff = (info.systemUptime - begin)
}
कहाँ पे diff:NSTimeInterval
बीता हुआ समय सेकंडों से है।
विकल्प 2: मच सी एपीआई
do {
var info = mach_timebase_info(numer: 0, denom: 0)
mach_timebase_info(&info)
let begin = mach_absolute_time()
// do something
let diff = Double(mach_absolute_time() - begin) * Double(info.numer) / Double(info.denom)
}
कहाँ पे diff:Double
नैनो-सेकंड द्वारा बीता हुआ समय है।
विकल्प 3: POSIX घड़ी एपीआई
do {
let begin = clock()
// do something
let diff = Double(clock() - begin) / Double(CLOCKS_PER_SEC)
}
कहाँ पे diff:Double
बीता हुआ समय सेकंडों से है।
बीते हुए समय के लिए दीवार-घड़ी का समय क्यों नहीं?
के प्रलेखन में CFAbsoluteTimeGetCurrent
:
इस फ़ंक्शन के लिए बार-बार कॉल करने से नीरस रूप से बढ़ते परिणामों की गारंटी नहीं मिलती है।
कारण जावा में currentTimeMillis
बनाम केnanoTime
समान है :
आप दूसरे उद्देश्य के लिए एक का उपयोग नहीं कर सकते। कारण यह है कि किसी भी कंप्यूटर की घड़ी सही नहीं है; यह हमेशा बहता है और कभी-कभी इसे ठीक करने की आवश्यकता होती है। यह सुधार या तो मैन्युअल रूप से हो सकता है, या अधिकांश मशीनों के मामले में, एक ऐसी प्रक्रिया है जो चलती है और सिस्टम घड़ी ("दीवार घड़ी") में छोटे सुधार जारी करती है। ये अक्सर होते रहते हैं। एक और ऐसा सुधार तब होता है जब कोई लीप सेकंड होता है।
यहाँ CFAbsoluteTime
स्टार्ट-अप समय के बजाय दीवार घड़ी समय प्रदान करता है। NSDate
दीवार घड़ी का समय भी है।
sqrt(number)
इसके स्थान पर रोका जा सकता हैnumber
, और आप थोड़ा और समय बचा सकते हैं - लेकिन बहुत अधिक विचार हैं, जो primes की मांग कर रहे हैं।