错误“请求转换为非标量类型”

时间:2018-08-15 08:10:28

标签: c multithreading select server threadpool

我正在尝试使用线程池并使用select实现多线程服务器,因此我在全局声明fd_set set并将其传递给线程池运行的函数。出现此错误

  

在功能“ threadF”中要求转换为非标量类型         fd_set set1 =(fd_set)s;

代码是这个

pool *createPool(int size){
    /*...*/
    if((err=pthread_create(&id,NULL,&threadF,(void *)&set))!=0){
        fprintf(stderr,"thread\n");
        exit(errno);
    }
    /*...*/
}

void *threadF(void* s){
    fd_set set1=(fd_set) s;
    /*...*/
}

也许我忘记了什么?

1 个答案:

答案 0 :(得分:2)

标量类型是算术类型(常规变量)和指针的正式名称。相反的是集合类型,它是数组和结构。编译器认为您正在将标量s转换为其他值。用简单的英语来说:不要从指针转换为结构实例。

标量s是一个指针,但是您将其强制转换为结构类型,而不是结构体的指针(这是传递给pthread_create的指针)。试试:

fd_set* set1 = (fd_set*)s;