clock_nanosleep(2)

الاسم
clock_nanosleep - نوم عالي الدقة مع ساعة قابلة للتحديد

المكتبة
مكتبة C القياسية (libc, -lc)، منذ glibc 2.17

قبل glibc 2.17، مكتبة الوقت الحقيقي (librt، -lrt)

موجز
#include <time.h>

int clock_nanosleep(clockid_t clockid, int flags,
                    const struct timespec *t,
                    struct timespec *_Nullable remain);

    متطلبات ماكروات اختبار الميزات لـ glibc (انظر feature_test_macros(7)):

clock_nanosleep():
    _POSIX_C_SOURCE >= 200112L

الوصف
مثل nanosleep(2)، يسمح clock_nanosleep() للخيط المستدعي بالنوم لفترة زمنية محددة بدقة نانوثانية. يختلف في السماح للمستدعي باختيار الساعة التي سيتم قياس فترة النوم مقابلها، وفي السماح بتحديد فترة النوم إما كقيمة مطلقة أو نسبية.

يتم تحديد قيم الوقت التي تم تمريرها وإرجاعها بواسطة هذه الاستدعاء باستخدام بنى timespec(3).

تحدد الوسيطة clockid الساعة التي سيتم قياس فترة النوم مقابلها. يمكن أن تحتوي هذه الوسيطة على إحدى القيم التالية:

CLOCK_REALTIME
    ساعة وقت حقيقي قابلة للضبط على مستوى النظام.

CLOCK_TAI (منذ لينكس 3.10)
    ساعة على مستوى النظام مشتقة من وقت الساعة الجدارية ولكنها تحسب الثواني الكبيسة.

CLOCK_MONOTONIC
    ساعة غير قابلة للضبط، متزايدة بشكل رتيب تقيس الوقت منذ نقطة غير محددة في الماضي لا تتغير بعد بدء تشغيل النظام.

CLOCK_BOOTTIME (منذ Linux 2.6.39)
    مطابق لـ CLOCK_MONOTONIC، باستثناء أنه يتضمن أيضًا أي وقت يكون فيه النظام معلقًا.

CLOCK_PROCESS_CPUTIME_ID
    ساعة قابلة للضبط لكل عملية تقيس وقت وحدة المعالجة المركزية المستهلك بواسطة جميع الخيوط في العملية.

انظر clock_getres(2) لمزيد من التفاصيل حول هذه الساعات. بالإضافة إلى ذلك، يمكن أيضًا تمرير معرفات ساعة وحدة المعالجة المركزية التي يتم إرجاعها بواسطة clock_getcpuclockid(3) و pthread_getcpuclockid(3) في clockid.

إذا كانت flags تساوي 0، فسيتم تفسير القيمة المحددة في t على أنها فترة نسبية للقيمة الحالية للساعة المحددة بواسطة clockid.

إذا كانت flags هي TIMER_ABSTIME، فسيتم تفسير t على أنه وقت مطلق كما تم قياسه بواسطة الساعة، clockid. إذا كان t أقل من أو يساوي القيمة الحالية للساعة، فإن clock_nanosleep() يعود فورًا دون تعليق الخيط المستدعي.

يعلق clock_nanosleep() تنفيذ الخيط المستدعي حتى ينقضي على الأقل الوقت المحدد بواسطة t، أو يتم تسليم إشارة تتسبب في استدعاء معالج إشارة أو إنهاء العملية.

إذا تمت مقاطعة الاستدعاء بواسطة معالج إشارة، يفشل clock_nanosleep() مع الخطأ EINTR. بالإضافة إلى ذلك، إذا لم يكن remain فارغًا، ولم تكن flags هي TIMER_ABSTIME، فإنه يعيد الوقت المتبقي غير المنوم في remain. يمكن بعد ذلك استخدام هذه القيمة لاستدعاء clock_nanosleep() مرة أخرى وإكمال نوم (نسبي).

قيمة الإرجاع
عند النوم بنجاح للفترة المطلوبة، يعيد clock_nanosleep() 0. إذا تمت مقاطعة الاستدعاء بواسطة معالج إشارة أو واجه خطأ، فإنه يعيد أحد أرقام الأخطاء الموجبة المدرجة في الأخطاء.

الأخطاء

EFAULT
    حدد t أو remain عنوانًا غير صالح.

EINTR
    تمت مقاطعة النوم بواسطة معالج إشارة؛ انظر signal(7).

EINVAL
    القيمة في حقل tv_nsec لم تكن في النطاق [0, 999999999] أو tv_sec كانت سالبة.

EINVAL
    كان clockid غير صالح. (CLOCK_THREAD_CPUTIME_ID ليست قيمة مسموح بها لـ clockid.)

ENOTSUP
    لا يدعم النواة النوم مقابل clockid هذا.

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

التاريخ
POSIX.1-2001. Linux 2.6، glibc 2.1.

ملاحظات
إذا كانت الفترة المحددة في t ليست مضاعفًا دقيقًا لدقة الساعة الأساسية (انظر time(7))، فسيتم تقريب الفترة إلى المضاعف التالي. علاوة على ذلك، بعد اكتمال النوم، قد لا يزال هناك تأخير قبل أن تصبح وحدة المعالجة المركزية حرة لتنفيذ الخيط المستدعي مرة أخرى.

استخدام مؤقت مطلق مفيد لمنع مشاكل انحراف المؤقت من النوع الموصوف في nanosleep(2). (تتفاقم هذه المشاكل في البرامج التي تحاول إعادة تشغيل نوم نسبي يتم مقاطعته بشكل متكرر بواسطة الإشارات.) لأداء نوم نسبي يتجنب هذه المشاكل، استدع clock_gettime(2) للساعة المطلوبة، أضف الفترة المطلوبة إلى قيمة الوقت المعادة، ثم استدع clock_nanosleep() مع العلم TIMER_ABSTIME.

لا يتم إعادة تشغيل clock_nanosleep() أبدًا بعد مقاطعته بواسطة معالج إشارة، بغض النظر عن استخدام العلم SA_RESTART الخاص بـ sigaction(2).

الوسيطة remain غير مستخدمة، وغير ضرورية، عندما تكون flags هي TIMER_ABSTIME. (يمكن إعادة تشغيل النوم المطلق باستخدام نفس الوسيطة t.)

يحدد POSIX.1 أن clock_nanosleep() ليس له تأثير على ترتيبات الإشارات أو قناع الإشارة.

يحدد POSIX.1 أنه بعد تغيير قيمة ساعة CLOCK_REALTIME عبر clock_settime(2)، يجب استخدام قيمة الساعة الجديدة لتحديد الوقت الذي ستستيقظ فيه خيط محظور على clock_nanosleep() المطلقة؛ إذا تجاوزت قيمة الساعة الجديدة نهاية فترة السكون، فإن استدعاء clock_nanosleep() سيعود فورًا.

يحدد POSIX.1 أن تغيير قيمة ساعة CLOCK_REALTIME عبر clock_settime(2) لن يكون له أي تأثير على خيط محظور على clock_nanosleep() النسبي.

انظر أيضًا
clock_getres(2)، nanosleep(2)، restart_syscall(2)، timer_create(2)، sleep(3)، timespec(3)، usleep(3)، time(7)

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

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

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