pthread_getcpuclockid(3)

الاسم
pthread_getcpuclockid - استرداد مُعرّف ساعة وقت وحدة المعالجة المركزية لخيط

المكتبة
مكتبة مسالك POSIX (libpthread، -lpthread)

موجز
#include <pthread.h>
#include <time.h>

int pthread_getcpuclockid(pthread_t thread, clockid_t *clockid);

الوصف
تحصل الدالة pthread_getcpuclockid() على مُعرّف ساعة وقت وحدة المعالجة المركزية للخيط الذي يُعطى مُعرّفه في thread، وتُعيده في الموقع المُشار إليه بواسطة clockid.

قيمة الإرجاع
عند النجاح، تعيد هذه الدالة 0؛ وعند حدوث خطأ، تعيد رقم خطأ غير صفري.

الأخطاء

ENOENT
    ساعات وقت وحدة المعالجة المركزية لكل خيط غير مدعومة من النظام.

ESRCH
    تعذر العثور على أي خيط بالمعرف thread.

السمات
للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر attributes(7).
الواجهة | السمة | القيمة
pthread_getcpuclockid() | سلامة الخيوط | MT-Safe

المعايير
POSIX.1-2008.

التاريخ
glibc 2.2. POSIX.1-2001.

ملاحظات
عندما يُشير thread إلى الخيط المُستدعي، تُعيد هذه الدالة مُعرّفاً يُشير إلى نفس الساعة التي يُعالجها clock_gettime(2) و clock_settime(2) عند إعطاء مُعرّف الساعة CLOCK_THREAD_CPUTIME_ID.

أمثلة
يُنشئ البرنامج أدناه خيطاً ثم يستخدم clock_gettime(2) لاسترداد إجمالي وقت وحدة المعالجة المركزية للعملية، ووقت وحدة المعالجة المركزية لكل خيط المُستهلك من قبل الخيطين. تُظهر جلسة الصدفة التالية تشغيلاً مثالياً:

    $ ./a.out;
    Main thread sleeping
    Subthread starting infinite loop
    Main thread consuming some CPU time...
    Process total CPU time:    1.368
    Main thread CPU time:      0.376
    Subthread CPU time:        0.992

  مصدر البرنامج
    /* Link with "-lrt" */

    #include <err.h>
    #include <errno.h>
    #include <pthread.h>
    #include <stdint.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <sys/time.h>
    #include <time.h>
    #include <unistd.h>

    static void *
    thread_start(void *arg)
    {
        printf("Subthread starting infinite loop\n");
        for (;;)
            continue;
    }

    static void
    pclock(char *msg, clockid_t cid)
    {
        struct timespec ts;

        printf("%s", msg);
        if (clock_gettime(cid, &ts) == -1)
            err(EXIT_FAILURE, "clock_gettime");
        printf("%4jd.%03ld\n", (intmax_t) ts.tv_sec, ts.tv_nsec / 1000000);
    }

    int
    main(void)
    {
        pthread_t thread;
        clockid_t cid;
        int s;

        s = pthread_create(&thread, NULL, thread_start, NULL);
        if (s != 0)
            errc(EXIT_FAILURE, s, "pthread_create");

        printf("Main thread sleeping\n");
        sleep(1);

        printf("Main thread consuming some CPU time...\n");
        for (unsigned int j = 0; j < 2000000; j++)
            getppid();

        pclock("Process total CPU time: ", CLOCK_PROCESS_CPUTIME_ID);

        s = pthread_getcpuclockid(pthread_self(), &cid);
        if (s != 0)
            errc(EXIT_FAILURE, s, "pthread_getcpuclockid");
        pclock("Main thread CPU time:   ", cid);

        /* The preceding 4 lines of code could have been replaced by:
           pclock("Main thread CPU time:   ", CLOCK_THREAD_CPUTIME_ID); */

        s = pthread_getcpuclockid(thread, &cid);
        if (s != 0)
            errc(EXIT_FAILURE, s, "pthread_getcpuclockid");
        pclock("Subthread CPU time: 1    ", cid);

        exit(EXIT_SUCCESS);         /* Terminates both threads */
    }

انظر أيضًا
clock_gettime(2), clock_settime(2), timer_create(2), clock_getcpuclockid(3), pthread_self(3), pthreads(7), time(7)

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.