2013-04-20 138 views
-1

我是C新手,这些指针的概念对我来说非常混乱。我试图做一些看起来很简单的事情,但是我收到了很多编译错误。我想创建一个新的线程,并将它作为参数传递给多个指针(看起来像你可以在c中使用全局变量的唯一方法就是通过指针),所以我创建了一个结构来存放所有这些指针,但是它不管我改变什么,似乎都不会编译。C - 将多个指针作为参数传递给pthread_create

这里是我的代码(我拿出大部分的代码,除了在我的问题似乎是)

//want to store the pointers in pointers, so when I change a pointer it changes the "global" variable 

void request_handler(params *parameters) { 
    params parameter = *parameters; 
    int *numberOfOtherServers = parameter.numberOfServers; 
    int *clientSock = parameter.clientSock; 
    char ***serverList = parameters.serverList; 
    struct function **functionList[10] = parameters.functionList[10]; 
} 

typedef struct { 
    int *clientSock; 
    int *numberOfServers; 
    char **serverList; 
    struct function *functionList[10]; 
} params; 

struct function { 
    char name[20]; 
    int parameterNumer; 
    int canDo; 
    char *otherServers[10]; 

}; 

int main(int argc, const char * argv[]) 
{ 
    int client_sock_desc; 

    pthread_t handler_thread; 

    struct function functionList[10] = {{"",0, 0, {}}}; 
    int i =0, numberofOtherServers; 
    char *serverList[10]; 

    //create a struct to pass as the parameters 
    struct params parameters; 
    parameters.clientSock = &client_sock_desc; 
    parameters.functionList[10] = functionList; 
    parameters.numberOfServers = &numberofOtherServers; 
    parameters.serverList = serverList; 

    //create a thread for the new clients request to be handled 
    if(pthread_create(&handler_thread, NULL, request_handler, parameters) != 0) { 
     perror("pthread_create failed"); 
    } 
} 

C是迄今为止最凌乱的语言,如果使用过。这个任务应该是如此简单,但我很遗憾,因为猜测有多少*或者我应该放一个变量来调用它。

+1

“(似乎你可以在c中使用全局变量的唯一方法就是通过指针)” - *** ??? *** – 2013-04-20 05:58:35

+0

是的。我不知道如何更改我在函数request_handler – user2158382 2013-04-20 06:00:36

+0

中主要声明的变量,从我目前阅读的内容来看,C没有全局作用域变量 – user2158382 2013-04-20 06:00:55

回答

1

您应通过pthread_createparameters的地址传递给request_handler函数。但因为它是一个局部变量,所以不适合传递它的地址。

因此将其定义为指针并为其分配内存。

struct params *parameters = malloc(sizeof(*parameters)); 

集成员适当地使用->,并通过它,因为它是。

更新:多几个错误params顶部

  • 移动的定义,以前request_handler功能。
  • 在主定义parameters一个params *parametersstruct params *parameters
  • 使用parameters->访问,而不是parameters.成员无论它是指针。
+0

为什么你建议有必要给结构命名?这与问题无关。 – sapi 2013-04-20 06:09:53

+0

我仍然在request_handler()的参数中发生错误。它说'params'是一个未知的类型。 – user2158382 2013-04-20 06:11:12

+0

即使更改了该params结构的定义后,我仍然收到一个错误,说明未知类型名称'params'。 – user2158382 2013-04-20 06:17:41

相关问题