Pthread_create用于线程化客户端发送和接收功能

时间:2015-11-28 06:51:47

标签: c++ multithreading sockets pthreads client

我正在用C ++编写一个聊天应用程序,并且有工作的客户端和服务器类。我现在正试图让我的客户端能够并行地从/向服务器读取和写入。我知道我必须创建两个线程,一个用于读取,一个用于写入。我不知道的是我应该用于这些线程的启动例程。我查看了所有的手册页,似乎无法完全理解。有人可以阐明这个问题并可能帮助我吗?如果我错过了任何重要的细节,请告诉我。

1 个答案:

答案 0 :(得分:0)

您的启动例程应该是您创建的顶级函数,它接受参数的void指针并返回void指针。例如:

void *trivial_start_routine(void *client_ptr)
{
    client_class *my_client = (client_class*) client_ptr;
    while(my_client->working()) {
        try {
          my_client->read_from_server();
        } catch(exception all_exceptions) {
           // Be sure to catch every exception.
           // Pthreads cannot handle a C++ exception
           // unwinding the stack.
        }
    }
    pthread_exit(NULL);
}

根据 pthread_exit 的Linux手册页:

  

从除以外的任何线程的start函数执行返回   主线程导致对pthread_exit()的隐式调用,   函数的返回值作为线程的退出状态。

然后,要启动该线程,您可以执行以下操作:

pthread_t start_reader_thread(client_class *my_client) {
    pthread_t thread;
    int status;

    status = pthread_create(&thread, NULL, trivial_start_routine, my_client);
    if(status != 0) {
        // status is an error number. See the man page for pthread_create.
    } else {
        return thread;
    }
}