首页 文章

在POSIX中执行线程

提问于
浏览
1

我在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 回答

  • 3

    One solution 将在发送中具有 while(input != exit) 类型的循环 .

    并使你的主要只等待传出线程(这意味着只有传出线程的pthread_join) . 因此,当用户选择退出时,main将退出而不等待传入的线程 .

    其次,您需要在receive函数中使用阻塞接收函数 . 因此,它要么处理传入消息,要么等待传入消息 .

    Another solution 将在main中具有 while(input != exit) 类型的循环 . 定义一个消息队列,其中main可以对要发送的消息进行排队,并且传出线程使用来自该线程的消息来实际发送它们 .

    传出线程要么发送消息,要么被阻塞,直到队列中有一条消息要发送 .

    输入线程的行为方式与上一解决方案中描述的方式相同 .

相关问题