C++ Multi-thread

C++ Multi-thread

本文关键字:Multi-thread C++      更新时间:2023-10-16

在一个类中,当我尝试为这样的方法创建一个线程时:

void *RippleBrush::paintRippleOnce(void){
    while(1){
        for (int j = 0; j < height; j ++) {
            for(int i = 0; i < width; i ++){
                int point = j * height + i;
                data[point].a += ripple->rippleNow[point];
                ripple->CaculateNextRipple();
            }
        }
    }
}
void RippleBrush::paintRipple(){
    pthread_t ctrl_thread;
        if(pthread_create(&ctrl_thread, NULL, RippleBrush::paintRippleOnce, NULL) != 0){
            perror("pthread_create");
            exit(1);
        }
}

显示错误:调用pthread_create没有匹配的函数

我如何在一个方法中为另一个方法在同一个类中创建线程?

#include <pthread.h>
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, 
                   void *(*start_routine) (void *), void *arg);

-pthread编译和链接。

我认为你最好把真正的worker函数设置为静态的:

void *RippleBrush::paintRippleOnce(void){
    while(1){
        for (int j = 0; j < height; j ++) {
            for(int i = 0; i < width; i ++){
                int point = j * height + i;
                data[point].a += ripple->rippleNow[point];
                ripple->CaculateNextRipple();
            }
        }
    }
}
void RippleBrush::paintRipple(){
    pthread_t ctrl_thread;
        if(pthread_create(&ctrl_thread,NULL, RippleBrush::paintRippleOnceWrapper,this)!=0){
            perror("pthread_create");
            exit(1);
        }
}
static void* RippleBrush::paintRippleOnceWrapper(void *args) {
   RippleBrush* brush= (RippleBrush*)args; // or dynamic_cast as you like
   brush->paintRippleOnce();
}