«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как я могу безопасно вызвать функции члена класса C ++ из потоков?

Как я могу безопасно вызвать функции члена класса C ++ из потоков?

Опубликовано в 2025-03-04
Просматривать:668

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());

. (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