فشل mem_fun، pthread وPTR الطبقة
-
19-08-2019 - |
سؤال
و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 ++ مكتبة الموضوع. هناك تحصل الطبقات للمواضيع، والأقفال، كائنات المزامنة وهلم جرا، ويمكن القيام متعدد خيوط بطريقة أكثر من ذلك بكثير وجوه المنحى.
لا تنتمي إلى StackOverflow