gpt4 book ai didi

c - pthread循环不会立即退出

转载 作者:行者123 更新时间:2023-11-30 15:41:44 25 4
gpt4 key购买 nike

基本上,我希望程序在发送“退出”命令时退出。到目前为止,一旦发送退出命令后 thread_callback 函数完成,主循环不会立即退出,而是在下一个客户端连接时退出。知道如何解决这个问题吗?

我不想使用 pthread_join 或 exit 函数。

谢谢。

void *thread_callback(void *client_data) {
int client_id = *(int *)client_data;
char some_buffer[BUFFER_SIZE];

printf("thread %p\n", (void *)pthread_self());

while (exit_flag != 1) {
int len = recv(client_id, some_buffer, BUFFER_SIZE, 0);

if (len > 0) {
printf("%.*s\n", len, some_buffer);

if (strcmp("exit", some_buffer) == 0)
exit_flag = 1;
}
}

pthread_exit(NULL);
}

int main(int argc, char **argv) {
int server_socket;
int client_socket;

server_socket = create_tcp_server();

while (exit_flag != 1) {
pthread_t thread_id;

client_socket = accept(server_socket, NULL, 0);

if (client_socket > 0) {
pthread_create(&thread_id, NULL, &thread_callback, (void *)&client_socket);
pthread_detach(thread_id);
}
}

return 0;
}

最佳答案

您还应该将 server_socket 传递给线程,然后:

if (strcmp("exit", some_buffer) == 0) {
exit_flag = 1;
shutdown(server_socket, 0);
}

shutdown 将使 accept 返回。

关于c - pthread循环不会立即退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20435487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com