الانتقال إلى المحتوى الرئيسي

كيف تتوقع في لغة البرمجة ج: الأساليب والمبادئ الأساسية

لغة البرمجة سي هي واحدة من أكثر اللغات شعبية ورواجا في العالم. يلعب التوقع دورا مهما في لغة البرمجة ج ويسمح لك بالتحكم في تنفيذ البرنامج. الانتظار هو عملية تعليق تنفيذ البرنامج لفترة معينة أو حتى يحدث حدث معين.

هناك عدة طرق أساسية للانتظار في لغة البرمجة ج. أولا ، هي وظيفة النوم () ، التي تعلق تنفيذ البرنامج لعدد محدد من الثواني. على سبيل المثال ، استدعاء وظيفة النوم(2) مؤقتا تنفيذ البرنامج لمدة 2 ثانية.

ثانيا ، يمكنك استخدام وظيفة أوسليب () ، الذي يعلق تنفيذ البرنامج لعدد محدد من ميكروثانية. على سبيل المثال ، استدعاء أوسليب(1000000) وظيفة تعليق تنفيذ البرنامج لمدة 1 ثانية.

أيضا في لغة البرمجة ج ، فمن الممكن استخدام وظيفة نانوسليب () ، والذي يسمح لك لإيقاف تنفيذ برنامج لعدد معين من نانو ثانية. على سبيل المثال ، يمكنك استدعاء وظيفة نانوسليب(&ريك ، نول) ، حيث ريك هو بنية نوع تيميسبيك تشير إلى عدد الثواني والنانو ثانية التي يجب تعليق البرنامج.

التوقع في لغة البرمجة سي هو جزء مهم لا يتجزأ من عملية تطوير البرنامج. باستخدام طرق الانتظار الرئيسية — النوم () ، أوسليب() و نانوسليب() وظائف-يسمح لك لإدارة بدقة الوقت والأحداث في البرنامج.

  1. طرق ومبادئ التوقع الأساسية في لغة البرمجة سي
  2. الانتظار باستخدام حلقة في حين
  3. الانتظار باستخدام حلقة
  4. الانتظار باستخدام عوامل التشغيل الشرطية
  5. الانتظار باستخدام وظيفة النوم
  6. الانتظار باستخدام المزامنة
  7. الانتظار باستخدام الإشارات
  8. الانتظار باستخدام المواضيع
  9. سؤال وجواب
  10. ما هي الأساليب والمبادئ الرئيسية للتوقع في لغة البرمجة ج?

طرق ومبادئ التوقع الأساسية في لغة البرمجة سي

لا تحتوي لغة البرمجة سي على وظائف مدمجة لانتظار التفاعل مع الأجهزة الخارجية أو البرامج الأخرى. ومع ذلك ، هناك العديد من الأساليب والمبادئ التي تسمح لك بتنفيذ التوقع في ج.

1. الانتظار مع حلقة

لتكرار الانتظار عدد معين من المرات.

# تشمل 

كثافة العمليات الرئيسية () {

الباحث الأول;

إلى عن على (أنا = 0 ؛ أنا < 10 ؛ أنا i) {

أوسليب (1000000); // انتظار 1 ثانية

}

العودة 0;

}

2. الانتظار مع الإشارات

يمنع تنفيذ البرنامج حتى يصبح عداد الإشارة إيجابيا. عندما يصبح العداد موجبا ، تقلل الوظيفة من قيمتها ويستمر البرنامج في التنفيذ.

# تشمل

كثافة العمليات الرئيسية () {

سيم_ت سيمافور;

سيمينايت (&سيمافور ، 0 ، 0) ؛ / / تهيئة سيمافور

// في انتظار الإشارة

سيم_وايت (&سيمافور);

العودة 0;

}

3. الانتظار مع المزامنة

يحظر تنفيذ البرنامج حتى يتم إلغاء قفل المزامنة. عندما يتم إلغاء قفل المزامنة ، تقوم وظيفة القفل بتعيينها إلى حالة مقفلة ويستمر البرنامج في التنفيذ.

# تشمل 

كثافة العمليات الرئيسية () {

بثريد_موتكس_متكس;

بتريد_موتكس_ينيت (&موتكس ، نول)؛ / / تهيئة موتكس

// في انتظار المزامنة

بثريد_موتكس_قفل (&موتكس);

العودة 0;

}

في الختام ، توفر لغة البرمجة سي عدة طرق ومبادئ لانتظار التفاعل مع الأجهزة الخارجية أو البرامج الأخرى. الطرق الموضحة أعلاه-الحلقات والإشارات ومزامنة المزامنة-هي الأكثر شيوعا في ج.اعتمادا على المتطلبات المحددة للتوقعات ، يمكنك اختيار الطريقة الأنسب.

الانتظار باستخدام حلقة في حين

في حين حلقة هي واحدة من بنيات الأساسية للغة البرمجة ج ويسمح لك لتنظيم توقع حالة معينة.

في هذا القسم ، سننظر في كيفية استخدام حلقة بينما لانتظار حدث معين أو تنفيذ مهمة معينة.

في حين حلقة لديه بناء الجملة التالية:

بينما (الشرط) {

  // الكود الذي سيتم تنفيذه طالما أن الشرط صحيح

}

عند تنفيذ حلقة بينما ، يتم فحص الشرط أولا. إذا كان الشرط صحيحا ، فسيتم تنفيذ الرمز الموجود داخل الأقواس المتعرجة.

بعد تنفيذ التعليمات البرمجية ، يتم التحقق من الشرط مرة أخرى. إذا بقيت صحيحة ، تتكرر الدورة. إذا أصبحت الحالة خاطئة ، تنتهي الحلقة من عملها ، ويتم نقل التحكم إلى المشغل التالي بعد الحلقة.

في أبسط الحالات ، يمكن استخدام حلقة أثناء انتظار الوصول إلى قيمة معينة لمتغير.

Например, мы можем использовать цикл while для ожидания, пока пользователь не введет правильный пароль:

int password = 12345;

int input;

printf("Enter the password: ");

scanf("%d", &input);

while (input != password) {

printf("Wrong password. Try again: ");

scanf("%d", &input);

}

printf("Access granted!");

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

إذا كانت كلمة المرور غير صحيحة ، يعرض البرنامج رسالة خطأ ويطلب كلمة المرور مرة أخرى. عندما يقوم المستخدم بإدخال كلمة المرور الصحيحة,

حالة الإدخال != كلمة المرور سوف تصبح كاذبة ، وسوف حلقة في حين الانتهاء من عملها.

ويمكن أيضا أن تستخدم حلقة في حين أن الانتظار لمهمة محددة إلى أن تكتمل.

على سبيل المثال ، يمكنك استخدام حلقة أثناء الانتظار حتى اكتمال تنزيل الملف أو تنفيذ خوارزمية معقدة.:

كثافة العمليات تحميل = 1;

في حين (تحميل) {

برينتف ("تحميل...

");

إذا (تم تنزيل الملف ()) {

تحميل = 0;

}

النوم (1);

}

برينتف ("تحميل كاملة!");

في هذا المثال ، سيتم تنفيذ حلقة بينما طالما أن متغير التنزيل صحيح.

يتم فحص الملف الذي تم تنزيله داخل الحلقة. إذا تم تنزيل الملف بنجاح ، يصبح متغير التنزيل خاطئا وتنتهي الحلقة.

خلاف ذلك ، ينام البرنامج لمدة 1 ثانية باستخدام وظيفة النوم ويتحقق من الحالة مرة أخرى.

من المهم أن نلاحظ أن حلقة في حين يمكن أن يؤدي إلى تنفيذ لانهائي إذا كان الشرط يبقى دائما صحيحا.

لذلك ، يجب أن تكون حذرا عند استخدام حلقة الوقت وتأكد من أن الحالة في الحلقة تصبح خاطئة في النهاية

من أجل أن تنتهي الحلقة.

الانتظار باستخدام حلقة

في لغة البرمجة ج ، يمكنك استخدام ل حلقة للانتظار. تتيح لك الحلقة تنفيذ كتلة معينة من التعليمات البرمجية لعدد محدد من المرات.

لاستخدام الحلقة ، تحتاج إلى تعيين ثلاث معلمات:

  1. التهيئة: تعيين القيمة الأولية للمتغير المراد استخدامه في الحلقة.
  2. الشرط: يحدد الشرط الذي يجب أن يكون صحيحا لتنفيذ كتلة من التعليمات البرمجية في حلقة.
  3. التكرار: يحدد العملية التي يتعين القيام بها بعد كل تمريرة من الحلقة.

مثال على استخدام حلقة للانتظار:

# تشمل 

كثافة العمليات الرئيسية () {

الباحث الأول;

إلى عن على (أنا = 0 ؛ أنا < 10 ؛ أنا i) {

برينتف ("انتظار ٪د ثواني...

"،أنا);

}

برينتف ("الانتظار مكتمل!

");

العودة 0;

}

في هذا المثال ، تقوم الحلقة بتنفيذ كتلة من التعليمات البرمجية التي تخرج النص " انتظار [رقم] من الثانية..."10 مرات. بعد اكتمال الحلقة ، الرسالة " اكتمال الانتظار!"يتم عرض.

يمكن أن تكون الحلقة مفيدة عند انتظار عمليات طويلة ، مثل تحميل البيانات أو إجراء العمليات الحسابية أو انتظار الإدخال من المستخدم. يسمح لك بالتحكم بدقة في عدد التكرارات والفاصل الزمني بينهما.

يوفر استخدام حلقة الانتظار للمبرمج المرونة والراحة في إدارة وقت تنفيذ البرنامج.

الانتظار باستخدام عوامل التشغيل الشرطية

في ال لغة البرمجة ج ، يمكن استخدام المشغلين الشرطيين لتنظيم انتظار استيفاء شروط معينة. الشرط هو تعبير يمكن أن يكون صحيحا أو خاطئا.

واحدة من العبارات الشرطية الأكثر شيوعا في ج هو بيان إف. يسمح لك بتنفيذ كتلة معينة من التعليمات البرمجية فقط إذا كان الشرط صحيحا. بناء جملة إذا بيان يشبه هذا:

إذا (شرط) {

// كتلة من التعليمات البرمجية التي يتم تنفيذها إذا كان الشرط صحيحا

}

يمكنك أيضا استخدام عامل التشغيل آخر لتحديد كتلة من التعليمات البرمجية التي يجب تنفيذها إذا كان شرط بيان إذا غير صحيح:

إذا (شرط) {

// كتلة من التعليمات البرمجية التي يتم تنفيذها إذا كان الشرط صحيحا

} آخر {

// كتلة من التعليمات البرمجية التي يتم تنفيذها إذا كان الشرط غير صحيح

}

للتحقق من عدة شروط ، يمكنك استخدام بيان آخر إذا:

إذا (الشرط 1) {

// كتلة من التعليمات البرمجية التي يتم تنفيذها إذا كان الشرط 1 صحيحا

} آخر إذا (الشرط 2) {

// كتلة من التعليمات البرمجية التي يتم تنفيذها إذا كان الشرط 1 خاطئا والشرط 2 صحيحا

} آخر {

// كتلة من التعليمات البرمجية التي يتم تنفيذها إذا كانت جميع الشروط خاطئة

}

بالإضافة إلى مشغل إف ، تحتوي لغة سي أيضا على عوامل تبديل وحالة ، مما يسمح لك بالتحقق من قيمة التعبير للامتثال لقيم معينة. يبدو بناء جملة بيان التبديل كما يلي:

التبديل (التعبير) {

قيمة الحالة1:

// كتلة من التعليمات البرمجية التي يتم تنفيذها إذا كان التعبير يساوي القيمة 1

استراحة;

قيمة الحالة 2:

// كتلة من التعليمات البرمجية التي يتم تنفيذها إذا تم تعيين التعبير على القيمة 2

استراحة;

الافتراضي:

// كتلة من التعليمات البرمجية التي يتم تنفيذها إذا كان التعبير لا يساوي أي من القيم

استراحة;

}

المشغل التبديل يسمح لك للتعبير عن سلسلة من الشيكات المساواة أكثر إحكاما من استخدام متعددة إذا / آخر إذا البيانات.

توقع المشغل الشرطي هو مفهوم مهم في لغة البرمجة ج لأنه يسمح للبرنامج باتخاذ القرارات بناء على ظروف مختلفة وتنفيذ الإجراءات المناسبة.

الانتظار باستخدام وظيفة النوم

في لغة البرمجة ج ، هناك وظيفة النوم التي تسمح لك لإيقاف تنفيذ البرنامج لعدد محدد من الثواني. هذا مفيد جدا عندما تحتاج إلى إنشاء وقفة في تنفيذ برنامج أو الانتظار لبعض الأحداث قبل مواصلة العمل.

تقبل وظيفة السكون معلمة واحدة-عدد الثواني التي يجب تعليق البرنامج فيها. على سبيل المثال ، لإيقاف البرنامج مؤقتا لمدة 5 ثوان ، يمكنك استدعاء وظيفة السكون(5).

فيما يلي مثال على استخدام وظيفة النوم:

# تشمل 

# تشمل

كثافة العمليات الرئيسية () {

برينتف ("بدء البرنامج

");

النوم (5) ؛ / / وقفة لمدة 5 ثوان

برينتف ("استمرار البرنامج

");

العودة 0;

}

نتيجة لتنفيذ هذا البرنامج ، سيتم عرض ما يلي على وحدة التحكم:

بداية البرنامج

(وقفة لمدة 5 ثوان)

استمرار البرنامج

تعد وظيفة السكون مفيدة بشكل خاص في الحالات التي يكون فيها من الضروري إنشاء تأخير في البرنامج لمنح المستخدم وقتا لتنفيذ بعض الإجراءات أو انتظار اكتمال العمليات الأخرى.

من المهم ملاحظة أن وظيفة النوم يمكن أن تنقطع عن طريق الإشارات ، لذلك من الضروري النظر في إمكانية حدوث مثل هذا الانقطاع والتعامل معه وفقا لذلك.

الانتظار باستخدام المزامنة

موتكس هو أداة المزامنة التي تسمح لك للتمييز الوصول إلى مورد مشترك بين العديد من المواضيع. تستخدم كائنات المزامنة عادة لمنع سلاسل رسائل متعددة من الوصول إلى قسم حرج من التعليمات البرمجية في نفس الوقت.

في لغة البرمجة ج ، هناك مكتبة بثريدس الخاصة التي توفر وظائف للعمل مع المواضيع والتزامن. يتم استخدام الوظائف التالية للعمل مع كائنات المزامنة:

  • بثريد_موتكس_ينيت-تهيئة المزامنة
  • بثريد_موتكس_قفل-موتكس لوك
  • بثريد_موتكس_ونلوك-فتح موتكس
  • pthread_mutex_destroy — уничтожение мьютекса

Пример использования мьютекса:

#include 

#include

#include

#define NUM_THREADS 5

pthread_mutex_t mutex;

void* thread_function(void* arg) {

int thread_id = *(int*)arg;

pthread_mutex_lock(&mutex); // блокировка мьютекса

printf("Поток %d вошел в критическую секцию

", thread_id);

// Критическая секция кода

printf("Поток %d вышел из критической секции

", thread_id);

pthread_mutex_unlock(&mutex); // разблокировка мьютекса

بثريد_خروج (نول);

}

كثافة العمليات الرئيسية () {

ثريد_ت المواضيع [نوم_ثريدس];

إنت ثريددسدس [نوم_ثريدس];

بتريد_موتكس_ينيت (&موتكس ، نول) ؛ / / инициализация мьютекса

ل (إنت أنا = 0 ؛ أنا < نوم_ثريدس ؛ أنا i) {

[أنا] = أنا;

ثريد_خلق (&المواضيع [ط] ، نول ، ثريد_فونكتيون ، & ثريد_دس [ط]);

}

ل (إنت أنا = 0 ؛ أنا < نوم_ثريدس ؛ أنا i) {

بثريد_جوين (المواضيع [أنا] ، لاغية);

}

بثريد_موتكس_دستروي (&موتكس) ؛ / / уничтожение мьютекса

العودة 0;

}

في هذا المثال ، يتم إنشاء العديد من مؤشرات الترابط ، كل منها ينفذ وظيفة الدالة الخيطية. داخل الدالة ، يتم تأمين موتكس أولا باستخدام وظيفة بثريد_موتكس_لوك. بعد الحظر ، ينفذ مؤشر الترابط القسم الحرج من التعليمات البرمجية ، ثم يفتح موتكس مع وظيفة بثريد_موتكس_ أونلوك. في نهاية البرنامج ، يتم تدمير موتكس باستخدام وظيفة بثريد_موتكس_دستروي.

يتيح لك استخدام المزامنة منع الوصول المتزامن إلى مورد مشترك في برنامج متعدد مؤشرات الترابط والتأكد من أن كل مؤشر ترابط ينفذ قسما مهما من التعليمات البرمجية بشكل صحيح.

الانتظار باستخدام الإشارات

هناك طرق مختلفة لتنفيذ التوقع في لغة البرمجة ج. واحد منهم هو استخدام الإشارات. الإشارات في ج هي الأحداث التي يمكن أن تحدث ويتم التعامل معها بواسطة برنامج. بمساعدة الإشارات ، يمكنك تنظيم انتظار حدث معين أو تغيير تدفق تنفيذ البرنامج.

للعمل مع الإشارات في ج ، وظائف من الإشارة.ح تستخدم المكتبة. باستخدام وظيفة الإشارة () ، يمكنك تعيين معالج إشارة سيتم استدعاؤه عند حدوث حدث معين. على سبيل المثال ، يقوم الكود التالي بتعيين معالج لإشارة السيجينت (الكود الذي يتم إنشاؤه عند الضغط كنترول + ج):

# تشمل 

# تشمل

باطلة سيغنتهاندلر (إنت سيغنو) {

برينتف ("إشارة سيجنت وردت

");

}

كثافة العمليات الرئيسية () {

إشارة (سيغنت ، سيغنت _ هاندلر);

برينتف ("في انتظار إشارة...

");

بينما (1) {

// في انتظار الإشارة

}

العودة 0;

}

في هذا المثال ، سيتم استدعاء الدالة سيجينت() في كل مرة يتم تلقي إشارة سيجينت ، وبدلا من عرض الرسالة "في انتظار إشارة..."،سيتم إخراج الرسالة" إشارة سيجنت المستلمة".

عندما ينتظر البرنامج إشارة ، يكون في وضع الحظر دون تنفيذ أي إجراءات أخرى. في المثال أعلاه ، يتم تنفيذ ذلك باستخدام حلقة لا نهائية بينما (1). لمتابعة تنفيذ البرنامج ، يمكنك استخدام إشارة أخرى أو الخروج من معالج الإشارة.

يمكن أيضا استخدام الإشارات لنقل المعلومات بين العمليات. على سبيل المثال ، يمكنك استخدام إشارة لإخبار مؤشر ترابط بأن مؤشر ترابط آخر قد أكمل عمله ، أو نقل البيانات من عملية إلى أخرى.

ومع ذلك ، يجب ألا يغيب عن البال أن استخدام الإشارات يمكن أن يكون معقدا إلى حد ما ويتطلب معالجة دقيقة. يمكن أن يؤدي الاستخدام غير الصحيح للإشارات إلى سلوك غير متوقع للبرنامج أو حتى إنهاء الطوارئ. لذلك ، عند استخدام الإشارات ، يجب أن تكون حذرا وتحقق من قيمة إرجاع الوظائف لمعالجة الأخطاء.

الانتظار باستخدام المواضيع

في البرمجة ، يعد الانتظار أحد أكثر العمليات شيوعا. غالبا ما يكون الانتظار مطلوبا عند الحاجة إلى تنفيذ إجراءات معينة فقط بعد تنفيذ إجراءات أخرى أو عند حدوث حدث معين. ومع ذلك ، في بعض الحالات ، يمكن أن يؤدي الانتظار إلى إبطاء البرنامج ، لذلك من المهم استخدام أفضل الأساليب والمبادئ.

في لغة البرمجة سي ، واحدة من أكثر الطرق شيوعا للانتظار هو استخدام المواضيع. تسمح لك سلاسل الرسائل بأداء مهمتين أو أكثر في نفس الوقت ، وهو أمر مفيد بشكل خاص عندما تحتاج إلى انتظار حدوث حدث.

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

في اللغة ج ، هناك طرق مختلفة للانتظار باستخدام المواضيع:

  1. بثريد_جوين () هي وظيفة تستخدم لانتظار انتهاء مؤشر ترابط آخر. يقوم بحظر مؤشر الترابط الحالي حتى اكتمال مؤشر ترابط التنفيذ المحدد.
  2. بثريد_كوند_وايت () هي وظيفة تسمح لك بانتظار حدوث حالة معينة. فإنه يمنع تيار الحالي وينتظر إشارة إلى أن الشرط قد تم الوفاء بها.
  3. ثريد_موتكس_لوك () و بثريد_موتكس_ أونلوك () هي وظائف تستخدم لقفل وفتح قسم حرج من التعليمات البرمجية. إنها تسمح لك بالتأكد من أن مؤشر ترابط واحد فقط ينفذ قسما مهما من التعليمات البرمجية في وقت معين.

كل طريقة من طرق الانتظار القائمة على الخيط لها خصائصها الخاصة ويمكن تطبيقها في مواقف مختلفة. يعتمد اختيار طريقة معينة على متطلبات وخصائص مهمة معينة.

مقارنة طرق الانتظار باستخدام المواضيع

الطريقةالمزاياالعيوب
ثريد_انضم()سهل الاستخدام ، يسمح لك بالانتظار حتى ينتهي مؤشر ترابط آخركتل تيار الحالي ، قد تبطئ البرنامج
بثريد_كوند_وايت()يسمح لك بانتظار حدوث الحالة دون حظر مؤشرات الترابط الأخرىيتطلب استخدام مزامنة إضافية لحماية الشروط
ثريد_موتكس_لوك () و بثريد_موتكس_ أونلوك()يوفر مزامنة الوصول إلى الموارد المشتركةهذا قد يؤدي إلى طريق مسدود

الانتظار القائم على الخيط هو أحد الجوانب الرئيسية للبرمجة متعددة مؤشرات الترابط في لغة سي. يتيح اختيار طريقة الانتظار الصحيحة الاستخدام الفعال للخيوط ويوفر المرونة في العمل مع المهام المختلفة.

سؤال وجواب

ما هي الأساليب والمبادئ الرئيسية للتوقع في لغة البرمجة ج?

هناك العديد من الطرق الأساسية للانتظار في لغة البرمجة ج ، بما في ذلك استخدام النوم () ، أوسليب() و نانوسليب() وظائف. يمكنك أيضا استخدام الإشارات وموتكسس لمزامنة وانتظر المواضيع. ومع ذلك ، من المهم أن تتذكر أن هذه الطرق قد يكون لها دقة وقيود مختلفة اعتمادا على نظام التشغيل والنظام الأساسي للأجهزة.