কম্পিউটার টিউটোরিয়াল

সি ভাষায় ফাংশনের এক্সিকিউশন টাইম মাপার পদ্ধতি (clock())

সি-এ একটি ফাংশন বা কোড ব্লক এক্সিকিউট হতে কতক্ষণ লাগলো তা মাপার জন্য <time.h> হেডারের clock() ফাংশন ব্যবহার করা হয়। এটি প্রসেসর টাইম (CPU time) রিটার্ন করে, ওয়াল-ক্লক টাইম (Real time) নয়।

পদ্ধতি

  1. clock_t start = clock(); — শুরুতে টাইম নিন
  2. কোড/ফাংশন এক্সিকিউট করুন
  3. clock_t end = clock(); — শেষে টাইম নিন
  4. double cpu_time = (double)(end - start) / CLOCKS_PER_SEC; — সেকেন্ডে কনভার্ট করুন

উদাহরণ

#include <stdio.h>
#include <time.h>

void take_enter() {
    printf("Press enter to stop the counter\n");
    while (1) {
        if (getchar())
            break;
    }
}

int main() {
    clock_t t = clock();
    printf("Timer starts\n");
    take_enter();
    printf("Timer ends\n");
    t = clock() - t;
    double time_taken = ((double)t) / CLOCKS_PER_SEC;
    printf("The program took %f seconds to execute\n", time_taken);
    return 0;
}

আউটপুট (নমুনা)

Timer starts
Press enter to stop the counter
Timer ends
The program took 5.218000 seconds to execute

গুরুত্বপূর্ণ পার্থক্য

মেট্রিকclock()time() / gettimeofday() / clock_gettime()
কী মাপেCPU Time (প্রসেসর ব্যবহার করা সময়)Wall-clock Time (রিয়েল ওয়ার্ল্ড টাইম)
মাল্টিথ্রেডেসকল থ্রেডের CPU টাইম যোগফলরিয়েল টাইম
স্লিপ/ওয়াইটগণনা হয় নাগণনা হয়
রেজোলিউশনসিস্টেম-নির্ভর (সাধারণত ১ms-১μs)উচ্চ (ন্যানোসেকেন্ড পর্যন্ত)

উন্নত টাইমিং (C11/C++11 এবং পরবর্তী)

// C11: timespec_get (TIME_UTC)
// POSIX: clock_gettime(CLOCK_MONOTONIC, &ts) — সবচেয়ে সঠিক ইন্টারভ্যাল টাইমিং
// C++11: std::chrono::high_resolution_clock

C++11 উদাহরণ

#include <chrono>
#include <iostream>

int main() {
    auto start = std::chrono::high_resolution_clock::now();
    // ... কোড ...
    auto end = std::chrono::high_resolution_clock::now();
    auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
    std::cout << "Time: " << duration.count() << " ms\n";
    return 0;
}

সুপারিশ

  • সিম্পল CPU টাইমিংয়ের জন্য clock() ঠিক আছে
  • বেঞ্চমার্কিং, প্রোফাইলিং, রিয়েল-টাইম মাপার জন্য clock_gettime(CLOCK_MONOTONIC) বা std::chrono ব্যবহার করুন
  • CLOCKS_PER_SEC সাধারণত ১,০০০,০০০ (POSIX) বা ১,০০০ (Windows) — ডাবলে কাস্ট করুন
  1. উইন্ডোজ ১০-এ ২৪ ঘন্টার ক্লককে ১২ ঘন্টার ফরম্যাটে পরিবর্তন করা

  2. উইন্ডোজ ১০-এ ২৪ ঘন্টার ঘড়িকে ১২ ঘন্টার ঘড়িতে পরিবর্তন করা

  3. এন্ড্রয়েডে ২৪-ঘণ্টা ঘড়ি ফরম্যাটে স্যুইচ করার পদ্ধতি

  4. উইন্ডোজ ১০ ঘড়ির সময় ভুল হলে? দ্রুত ও নির্ভরযোগ্য সমাধান