pthread for processes with more than one parameter
我目前正在创建一个使用线程处理 BMP 图像的程序。问题是……我知道 pthread 使用函数的签名作为 arg 4……但是如果函数需要超过 1 个参数,我怎么能创建一个线程呢?
这是函数所需的结构:
1
2 3 4 5 6 7 |
typedef struct { HEADER header; INFOHEADER infoheader; PIXEL *pixel; } IMAGE; IMAGE imagenfte,imagendst; |
功能代码如下:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
void *processBMP(IMAGE *imagefte, IMAGE *imagedst) { int i,j; int count=0; PIXEL *pfte,*pdst; PIXEL *v0,*v1,*v2,*v3,*v4,*v5,*v6,*v7; int imageRows,imageCols; memcpy(imagedst,imagefte,sizeof(IMAGE)–sizeof(PIXEL *)); imageRows = imagefte->infoheader.rows; imageCols = imagefte->infoheader.cols; imagedst->pixel=(PIXEL *)malloc(sizeof(PIXEL)*imageRows*imageCols); for(i=1;i<imageRows–1;i++){ for(j=1;j<imageCols–1;j++) { pfte=imagefte->pixel+imageCols*i+j; v0=pfte–imageCols–1; v1=pfte–imageCols; v2=pfte–imageCols+1; v3=pfte–1; v4=pfte+1; v5=pfte+imageCols–1; v6=pfte+imageCols; v7=pfte+imageCols+1; pdst=imagedst->pixel+imageCols*i+j; … } … ///////Variables a utilizar en Hilo/////// … |
我试着用这个来解决它:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
struct threadImgs{ //Estructura para enviar ambas imagenes como argumento del thread IMAGE fuente; IMAGE destino; }; struct threadImgs imgsSENT; void *processBMP(void *imgs) struct threadImgs* imagen = (struct threadImgs *) imgs; IMAGE *imagefte = imagen->fuente; |
但它并没有真正的帮助,甚至无法编译由于”初始化类型结构错误时不兼容的类型”
任何帮助 D:???
您将两个参数package到一个结构中的方法是要走的路。
但请注意类型:
1
2 3 4 5 |
struct threadImgs
{ IMAGE fuente; IMAGE destino; }; |
上面的结构定义它的元素是
的实例
您的线程函数尝试访问指向
的指针
1
2 3 4 5 6 7 8 |
void *processBMP(void *imgs)
{ struct threadImgs* imagen = (struct threadImgs *) imgs; IMAGE *imagefte = imagen->fuente; … |
所以要么改变结构体将其元素定义为指针:
1
2 3 4 5 |
struct threadImgs
{ IMAGE * fuente; IMAGE * destino; }; |
或者改变线程函数不拉指针:
1
2 3 4 5 6 7 8 |
void *processBMP(void *imgs)
{ struct threadImgs * imagen = (struct threadImgs *) imgs; IMAGE imagefte = imagen->fuente; … |
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/269316.html