我正在构建一个多线程网络聊天程序,但我无法弄清楚如何将变量传递到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
函数?
答案 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);
}
}
}
希望这有帮助。