我正在按照书中的顺序操作此应用程序,并尝试复制该程序并查看其作用。
令我惊讶的是,我发现它不起作用!
程序如下:
#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*)¶metroOUT);
}
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]
如何解决此错误?
答案 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;
}