No reino da multithreading, é comum encontrar a necessidade de invocar as funções de membro de uma classe na execução do thread. No entanto, esta tarefa pode apresentar desafios devido ao parâmetro "this" oculto nas funções de membro da classe C. void *print (void *) {cout
agora, vamos criar um vetor de instâncias C:
class C { void *print(void *) { coutpara criar um thread que execute c.print (), você pode escrever intuitivamente:
vectorno entanto, this… (Tree_item ::*) (void*) 'para' void*(*) (void*) 'classes; pthread_t t1; classes.push_back(C()); classes.push_back(C()); o problema surge porque pthread_create () espera um ponteiro de função de um tipo específico, Whrereh Seia C [0] .Print é um ponteiro para uma função de membro com um hidden "this" Paramet. [[ POINTER
pthread_create(&t1, NULL, &c[0].print, NULL);Para superar esse obstáculo, você tem duas opções:Método da classe estática
pthread_create(&t1, NULL, &c[0].print, NULL);Um método de classe estática não possui um parâmetro "this" e pode ser chamado diretamente sem uma instância da classe. Veja como você pode implementar um método de classe estática para a função Hello:classe C { público: Void estático *Olá (void *) {std :: cout Então, você pode criar um thread usando o método da classe estática:
pthread_create (& t, null, & c :: hello, null);
function pointer
A outra opção é para usar uma função pointer que Este ponteiro de função pode ser usado para criar um thread.
class C { public: static void *hello(void *) { std::coutonde hello_helper é definido como:
pthread_create(&t, NULL, &C::hello, NULL);usando um método de classe estática ou um ponteiro de função, você pode invocar com segurança as funções de um membro de uma classe dentro de um tópico, evitando a questão do parâmetro "this".
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3