C - pthread 循环不会立即退出



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

我不希望使用pthread_join或exit函数。

谢谢。

void *thread_callback(void *client_data) {
  int client_id = *(int *)client_data;
  char some_buffer[BUFFER_SIZE];
  printf("thread %pn", (void *)pthread_self());
  while (exit_flag != 1) {
    int len = recv(client_id, some_buffer, BUFFER_SIZE, 0);
    if (len > 0) {
        printf("%.*sn", 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);
}

CCD_ 2将使CCD_ 3返回。

最新更新