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