将变量传递给pthread_create函数

时间:2017-02-08 18:14:35

标签: c multithreading pthreads

我正在构建一个多线程网络聊天程序,但我无法弄清楚如何将变量传递到pthread_create

我有以下代码行创建一个帖子:

pthread_create(&thread, NULL, receive, (void *) socket_fd);

我的接收功能如下:

void * receive(void * socket) {
    int socket_fd, response;
    char message[MESSAGE_BUFFER];
    socket_fd = (int) socket;

    while(true) {
        response = recvfrom(socket_fd, message, MESSAGE_BUFFER, 0, NULL, NULL);
        if (response) {
            printf("\nServer> %s", message);
            printf("%s", prompt);
        }
    }
}

prompt中调用receive时,如何将receive变量传递到此pthread_create函数?

1 个答案:

答案 0 :(得分:1)

您可以在一个结构中打包创建时传递给线程的所有数据,并将其指针传递给pthread_create的最后一个参数。简而言之:

定义结构:

typedef struct{
     char* prompt;
     int socket;
} thread_data;

然后拨打pthread_create

thread_data data;
// place code here to fill in the struct members...
pthread_create(&thread, NULL, receive, (void *) &data);
接收函数中的

void * receive(void * threadData) {
    int socket_fd, response;
    char message[MESSAGE_BUFFER];

    thread_data* pData = (thread_data*)threadData;
    socket_fd = pData->socket;
    char* prompt = pData->prompt;

    while(true) {
        response = recvfrom(socket_fd, message, MESSAGE_BUFFER, 0, NULL, NULL);
        if (response) {
            printf("\nServer> %s", message);
            printf("%s", prompt);
        }
    }
}

希望这有帮助。