pthread_tryjoin_np(3)

الاسم
pthread_tryjoin_np, pthread_timedjoin_np - محاولة الانضمام إلى خيط منتهٍ

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

موجز
#define _GNU_SOURCE             /* انظر feature_test_macros(7) */
#include <pthread.h>

int pthread_tryjoin_np(pthread_t thread, void **retval);
int pthread_timedjoin_np(pthread_t thread, void **retval,
                         const struct timespec *abstime);

الوصف
تعمل هاتان الدالتان بنفس طريقة pthread_join(3)، باستثناء الاختلافات الموصوفة في هذه الصفحة.

تنفذ الدالة pthread_tryjoin_np() انضمامًا غير محظور مع الخيط thread، وتُعيد حالة خروج الخيط في *retval. إذا لم يكن thread قد انتهى بعد، فبدلاً من الحظر، كما تفعل pthread_join(3)، تُعيد الاستدعاء خطأً.

تنفذ الدالة pthread_timedjoin_np() انضمامًا بمهلة زمنية. إذا لم يكن thread قد انتهى بعد، فسيحظر الاستدعاء حتى وقت أقصى، محدد في abstime، يُقاس مقابل ساعة CLOCK_REALTIME. إذا انتهت المهلة قبل إنهاء thread، يُعيد الاستدعاء خطأً. الوسيط abstime هو بنية timespec(3)، تحدد وقتًا مطلقًا يُقاس منذ الحقبة (انظر time(2)).

قيمة الإرجاع
عند النجاح، تُعيد هاتان الدالتان 0؛ عند الخطأ، تُعيدان رقم خطأ.

الأخطاء
يمكن أن تفشل هاتان الدالتان بنفس أخطاء pthread_join(3). يمكن أن تفشل pthread_tryjoin_np() بالإضافة إلى ذلك بالخطأ التالي:

EBUSY
    لم يكن thread قد انتهى بعد في وقت الاستدعاء.

يمكن أن تفشل pthread_timedjoin_np() بالإضافة إلى ذلك بالأخطاء التالية:

EINVAL
    قيمة abstime غير صالحة (tv_sec أقل من 0 أو tv_nsec أكبر من 1e9).

ETIMEDOUT
    انتهت مهلة الاستدعاء قبل إنهاء thread.

لا تُعيد pthread_timedjoin_np() الخطأ EINTR أبدًا.

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

المعايير
جنو؛ ومن هنا جاءت اللاحقة "_np" (غير منقول) في الأسماء.

التاريخ
glibc 2.3.3.

العلل
تقيس الدالة pthread_timedjoin_np() الوقت بحساب داخلي لفاصل نوم نسبي يُقاس بعد ذلك مقابل ساعة CLOCK_MONOTONIC بدلاً من ساعة CLOCK_REALTIME. وبالتالي، لا تتأثر المهلة بالتغييرات غير المستمرة لساعة CLOCK_REALTIME.

أمثلة
ينتظر الكود التالي الانضمام لمدة تصل إلى 5 ثوانٍ:

    struct timespec ts;
    int s;

    ...

    if (clock_gettime(CLOCK_REALTIME, &ts) == -1) {
        /* معالجة الخطأ */
    }

    ts.tv_sec += 5;

    s = pthread_timedjoin_np(thread, NULL, &ts);
    if (s != 0) {
        /* معالجة الخطأ */
    }

انظر أيضًا
clock_gettime(2), pthread_exit(3), pthread_join(3), timespec(3), pthreads(7)

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

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

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