C - 将多个指针作为参数传递给pthread_create

时间:2013-04-20 05:57:23

标签: c string pointers struct

我是C的新手,这些指针的概念让我非常困惑。我正在尝试做一些看起来很简单的事情,但是我遇到了很多编译错误。

我想生成一个新线程,并将多个指针作为参数传递(看起来你可以通过指针在c中使用全局变量的唯一方法),所以我创建了一个包含所有这些指针的结构,但它不会似乎无论我改变什么都会编译。

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

//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 个答案:

答案 0 :(得分:1)

您应该通过parameters将地址request_handler传递给pthread_create。但由于它是一个局部变量,因此不适合传递其地址。

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

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

使用->正确设置成员,并按原样传递。

更新:更多错误

  • params功能之前将request_handler的定义移至顶部。
  • 在主要定义parametersparams *parameters而不是struct params *parameters
  • 使用parameters->来访问成员,而不是parameters.,只要它是指针。