为什么pthread_join给出此错误? [错误]从'void *'到'void **'的无效转换[-fpermissive]

时间:2019-03-15 22:24:57

标签: c++ multithreading pthreads

我正在按照书中的顺序操作此应用程序,并尝试复制该程序并查看其作用。

令我惊讶的是,我发现它不起作用!

程序如下:

#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
#include <time.h>

#define TANTI 10
int parametroOUT;

void* codice(void *arg){
    srand(time(NULL)); 
    parametroOUT=(rand()%6)+1;
    pthread_exit((void*)&parametroOUT);
}

int main(){
    int dadoEstratto, *risultato=0;
    pthread_t t1;
    pthread_create(&t1,NULL,codice,NULL);   
    pthread_join(t1, (void*) &risultato);
    printf("dado estratto: %d",*risultato);
    return 0;                                           
}

它在以下行返回错误:pthread_join(t1, (void*) &risultato);

错误是:

  

[错误]从'void *'到'void **'的无效转换[-fpermissive]

如何解决此错误?

3 个答案:

答案 0 :(得分:1)

此代码是错误的:

int *risultato=0;
...
pthread_join(t1, (void*) &risultato);

prototype for pthread_join()是:

int pthread_join(pthread_t thread, void **value_ptr);

请注意,它是void **。这是因为用于启动线程的函数返回了void *。为了能够访问从线程启动函数返回的void *,您需要传递void *的地址,以便pthread_join()可以填写值:

void *risultato=0;
...
pthread_join(t1, &risultato);

请注意,risultato现在是正确的void *,并且其地址通过使用pthread_join()“地址”运算符传递给&

要返回int函数的codice()返回值,请执行以下操作:

int *intPtr = ( int * ) risultato;
int value = *intPtr;

答案 1 :(得分:0)

第二个参数的类型应为$group

这是您应该做的:

dashboards

完整示例:

void**

答案 2 :(得分:0)

我通过使这个简单的功能解决了我的问题,谢谢所有帮助我的人

#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
#include <time.h>
#define TANTI 10
int dadi[TANTI];
int i=0; 
void* codice(void *arg){

	while(i<TANTI){
    srand(time(NULL);
		dadi[i]=rand() % 6 + 1;
		printf("il dado estratto e': %d\n",dadi[i]);
		i++;
				  }
	pthread_exit(0);			  
					   }
int main(){
	int dadoEstratto;
	pthread_t t1;
	pthread_create(&t1,NULL,codice,NULL);
	pthread_join(t1,NULL);
	return 0;											
		}