سؤال

أحتاج إلى قياس الوقت الذي تستغرقه عملية حسابية طويلة في وحدة المعالجة المركزية (وليس ساعة الحائط) في لغة C++ على Linux (والأنظمة الأخرى المشابهة لنظام Unix)، لذلك أستخدم Clock().مشكلة:وفي أنظمة 32 بت، يكتمل هذا بعد حوالي 2000 أو 4000 ثانية.

ما هو الحل الموصى به لهذا؟

هل كانت مفيدة؟

المحلول

وتحتاج إلى استخدام getrusage التي تملأ البنية التالية:

struct rusage {
    struct timeval ru_utime; /* user time used */
    struct timeval ru_stime; /* system time used */
    ...
};

لإكمال، struct timeval:

struct timeval {
    time_t      tv_sec;     /* seconds */
    suseconds_t tv_usec;    /* microseconds */
};

وكما هو الحال دائما، والتشاور مع manpage للحصول على التفاصيل (man getrusage)

نصائح أخرى

هل تحتاج إلى الدقة التي تقدمها clock()؟إذا لم يكن الأمر كذلك، يمكنك استخدام time() مرتين وخذ الفرق:

time_t start, end;
double diff;

time(&start);
// Do your stuff...
time(&end);
diff = difftime(end, start);

يحرر: time() يقيس الوقت الحقيقي (وليس وقت وحدة المعالجة المركزية) كما أشار litb في تعليقه، ولكنه يفعل ذلك أيضًا clock().إذا كنت تريد قياس وقت وحدة المعالجة المركزية، فيجب عليك اتباع نصيحة واستخدام litb getrusage().

وسيلة ممكنة آخر هو استخدام gettimeofday () مرتين لأنه يعود مللي ثانية دقة.

والحصول على الوقت على أساس متكرر وأيضا زيادة في كثافة مضاعف متغير في كل مرة تتحرك عبر؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top