我正在用 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 中使用 while(input != exit)
类型的循环。
并让您的 main 仅等待 传出 线程(这意味着 pthread_join 仅用于传出线程)。所以,当用户选择退出时,main会退出而不等待线程的到来。
其次,您需要在接收函数中使用阻塞接收 函数。因此,它要么正在处理传入消息,要么正在等待消息。
另一种解决方案 是在main 中使用while(input != exit)
类型的循环。定义一个消息队列,main 可以在其中对要发送的消息进行排队,传出 线程使用来自该线程的消息来实际发送它们。
传出线程要么正在发送消息,要么被阻塞,直到队列中有要发送的消息。
输入线程的行为方式与前面解决方案中描述的方式相同。
关于c - 在 POSIX 中执行线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6370582/