我在C中创建了一个异步聊天应用程序。我创建了两个线程,一个用于接收,另一个用于发送,如下所示。
void* send() { ... } void* receive() { ... } main() { .. inid = pthread_create(&incoming,NULL,receive,"Incoming thread"); outid= pthread_create(&outgoing,NULL,send,"Outgoing thread"); .. pthread_join(incoming,NULL); pthread_join(outgoing,NULL); .. }
问题是,发送和接收函数只被调用一次,程序终止。我希望两个线程一直运行直到用户希望退出(检查退出的条件在send函数中定义)。怎么解决这个问题?
答案 0 :(得分:3)
一个解决方案是在发送中拥有while(input != exit)
类型的循环。
让你的主要只等待传出线程(这意味着仅对传出线程使用pthread_join)。因此,当用户选择退出时,main将退出而不等待传入的线程。
其次,您需要在receive函数中使用阻塞接收函数。因此,它要么处理传入的消息,要么等待一个消息。
另一种解决方案是在 main 中拥有while(input != exit)
类型的循环。定义了一个消息队列,其中 main 可以对要发送的消息进行排队,传出线程使用来自该线程的消息来实际发送消息。
传出线程正在发送消息或被阻塞,直到队列中有一条消息要发送。
输入线程的行为方式与上一解决方案中描述的方式相同。