"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكنني استدعاء وظائف عضو فئة C ++ بأمان من المواضيع؟

كيف يمكنني استدعاء وظائف عضو فئة C ++ بأمان من المواضيع؟

نشر في 2025-03-04
تصفح:694

How Can I Safely Call C   Class Member Functions from Threads?

استدعاء وظائف أعضاء الفئة في مؤشرات الترابط بأمان

في عالم الرؤوس المتعددة ، من الشائع مواجهة الحاجة إلى استدعاء وظائف الأعضاء في فئة ما في تنفيذ مؤشر الترابط. ومع ذلك ، يمكن أن تمثل هذه المهمة تحديات بسبب المعلمة المخفية "هذا" في وظائف عضو الفئة C. void *print (void *) {cout

الآن ، دعنا ننشئ متجهًا من مثيلات C:

class C {
    void *print(void *) { cout  

لإنشاء مؤشر ترابط ينفذ c.print () ، قد تكتب بشكل مباشر:

vector classes;
pthread_t t1;
classes.push_back(C());
classes.push_back(C());

تنشأ المشكلة لأن pthread_create () تتوقع مؤشر دالة لنوع معين ، في حين أن c [0]. Pointer

pthread_create(&t1, NULL, &c[0].print, NULL);

طريقة فئة ثابتة

cannot convert ‘void* (tree_item::*)(void*)’ to ‘void* (*)(void*)’ 

الفئة C { عام: باطل ثابت *مرحبا (void *) {std :: cout

بعد ذلك ، يمكنك إنشاء مؤشر ترابط باستخدام طريقة الفئة الثابتة:

يمكن بعد ذلك استخدام مؤشر الوظيفة هذا لإنشاء مؤشر ترابط.

C C ؛ pthread_create (& t ، null ، & c :: hello_helper ، & c) ؛

حيث يتم تعريف hello_helper على النحو التالي: }

class C {
public:
    static void *hello(void *) { std::cout 
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3