سؤال

وpthread يأخذ في كما void *(*start_routine)(void* userPtr) به المعلمة، وكنت آمل يمكنني استخدام std::mem_fun لحل مشكلتي لكنني غير قادر.

وأود أن استخدام void * threadFunc() وظيفة ويكون الفعل userPtr كما (userPtr->threadFunc()) الصف. هل هناك وظيفة مماثلة لstd::mem_func التي يمكنني استخدامها؟

هل كانت مفيدة؟

المحلول

ويتمثل أحد السبل لاستخدام دالة العالمية التي تدعو لديك وظيفة موضوع رئيسية هي:

class MyThreadClass {
public:
  void main(); // Your real thread function
};

void thread_starter(void *arg) {
  reinterpret_cast<MyThreadClass*>(arg)->main();
}

وبعد ذلك، عندما تريد بدء موضوع:

MyThreadClass *th = new MyThreadClass();
pthread_create(..., ..., &thread_starter, (void*)th);

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top