我在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和receive函数只调用一次,程序终止 . 我希望两个线程一直运行直到用户希望退出(检查退出的条件在send函数中定义) . 怎么解决这个?
1 回答
One solution 将在发送中具有
while(input != exit)
类型的循环 .并使你的主要只等待传出线程(这意味着只有传出线程的pthread_join) . 因此,当用户选择退出时,main将退出而不等待传入的线程 .
其次,您需要在receive函数中使用阻塞接收函数 . 因此,它要么处理传入消息,要么等待传入消息 .
Another solution 将在main中具有
while(input != exit)
类型的循环 . 定义一个消息队列,其中main可以对要发送的消息进行排队,并且传出线程使用来自该线程的消息来实际发送它们 .传出线程要么发送消息,要么被阻塞,直到队列中有一条消息要发送 .
输入线程的行为方式与上一解决方案中描述的方式相同 .