c - 在 POSIX 中执行线程

标签 c multithreading pthreads

我正在用 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/

相关文章:

c - 在 char * 的一部分中搜索带有 strstr 的字符串

java - 如果 Activity 被杀死,Service 会发生什么?

gcc - gcc 和 pthreads 的 undefined reference 错误 _dl_stack_flags

c - 按位否定后右移的意外结果

c - %[^\n] 在 C 语言中是什么意思?

c - 链接代码::阻止自定义库错误(找不到)

iphone - NSOperations 队列和处理应用程序退出

java - 是下面的静态实用方法 Threadsafe

c - pthread_setname_np() 设置功能时

Java 互斥体与条件变量的关联