2015-09-14 63 views
-1

在一个类中,当我尝试创建一个线程像这样的方法:C++多线程

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”没有匹配的功能。

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

回答

0
#include <pthread.h> 

int pthread_create(pthread_t *thread, const pthread_attr_t *attr, 
        void *(*start_routine) (void *), void *arg); 

编译和链接与-pthread

+0

谢谢!但是如何编写一个void *(* start_routin)(void *)的例子。我知道如何在main.cpp中完成它,但是我无法在其他class.cpp中完成它。 – David

+0

你得到了什么错误? – ardhitama

0

我看你最好让你的真正的工人功能为静态:

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