此刻,当我尝试使用我的线程执行decFunk进程时,出现参数3错误。我见过的例子,他们提到我需要一个无效的参数,但我不知道如何做到这一点。从void *
pthreads传递参数3警告
void *decFunk(PQueue* pQ){
pQ->currentProcess = pQ->firstProcess;
int temp = pQ->currentProcess->duration;
pQ->firstProcess->duration = temp -1;
if(pQ->currentProcess->duration == 0){
pQ->firstProcess = pQ->firstProcess->next;
}
return NULL;
}
int main(int argc, char *argv[]) {
int numThreads = atoi(argv[1]);
sem_init(&tLock,0,0);
sem_init(&qLock,0,0);
FILE * fIn;
PQueue* sortQ;
sortQ = startQueue();
printf("Enter number of threads you want to use.");
pthread_t threads;
pthread_create(&threads ,NULL , decFunk, sortQ);
for(t = 0; t< 5; t++){
fIn = fopen("input.txt", "r");
printf("Time: %d\n", t);
readIn(fIn, sortQ);
printQ(sortQ);
t++;
fclose(fIn);
sleep(1);
}
pthread_join(&threads,NULL);
pthread_exit(NULL);
return 0;
}
原型为'在pthread_create()'是'INT在pthread_create(的pthread_t *线程,常量pthread_attr_t * ATTR,无效*(*的start_routine) (void *),void * arg);',所以是的,'pthread_create()'的最后一个参数和你传递的函数的唯一参数是* void *',不管你是否确定那”。 – EOF
我或多或少地问如何做一个空白参数,我不熟悉这一点。 – rickless
只要你调用'pthread_create()'的原型时就可见,当你将'sortQ'传递给'pthread_create()'时,从'PQueue *'到'void *'的转换是隐含的。你只需要将'decFunk()'改成'void * decFunk(void * pQ)'。 – EOF