যতদূর আমি জানি, অতিবাহিত সময় পরিমাপের কমপক্ষে দশটি উপায়:
মনোটোনিক ঘড়ি ভিত্তিক:
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: পসিক্স ক্লক এপিআই
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
এবং আপনি আরও কিছুটা সময় বাঁচাতে পারেন - তবে প্রাইমগুলি অনুসন্ধানের জন্য আরও অনেক ধারণা রয়েছে।