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

问题描述 投票:0回答:1

我正在尝试使用线程池并使用选择来实现多线程服务器,因此我在全局范围内声明了

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;
    /*...*/
}

也许我忘记了什么?

c multithreading server threadpool posix-select
1个回答
6
投票

标量类型是算术类型(常规变量)和指针的正式名称。相反的是聚合类型,即数组和结构体。编译器认为您正在从标量

s
转换为其他值。用简单的英语来说:不要从指针转换为结构实例。

标量

s
是一个指针,但您将其转换为结构类型,而不是指向结构的指针(这是您传递给 pthread_create 的内容)。尝试:

fd_set* set1 = (fd_set*)s;
© www.soinside.com 2019 - 2024. All rights reserved.