В сфере многопоточного чтения часто встречается с необходимостью вызывать функции членов класса в выполнении потока. Однако эта задача может представлять проблемы из -за скрытого «этого« параметра в функциях члена класса C. void *print (void *) {cout
теперь, давайте создадим вектор C экземпляров:
class C { void *print(void *) { coutдля создания потока, который выполняет c.print (), вы можете интуитивно написать:
vectorclasses; pthread_t t1; classes.push_back(C()); classes.push_back(C()); . (tree_item ::*) (void*) ’to« void*(*) (void*) ’
]pthread_create(&t1, NULL, &c[0].print, NULL);, чтобы преодолеть это препятствие, у вас есть два варианта:
cannot convert ‘void* (tree_item::*)(void*)’ to ‘void* (*)(void*)’Статический метод класса не имеет параметра «этот» и может быть вызван непосредственно без экземпляра класса. Вот как вы могли бы реализовать метод статического класса для функции Hello:
класс C { публика: static void *hello (void *) {std :: cout
C C; pthread_create (& t, null, & c :: hello_helper, & c);
, где hello_helper определяется как:
void *hello_helper (void *context) {return ((c *) контекст)-> hello (); }
class C { public: static void *hello(void *) { std::cout
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3