我有一个使用单线程库的主进程,我只能使用主进程中的库函数。我有一个由父进程生成的线程,该线程将从网络接收到的信息放入队列中。
我需要能够告诉主进程队列中有东西。然后它可以访问队列并处理对象。线程无法处理这些对象,因为库只能由一个进程调用。
我想我需要使用管道和信号。我还从各种新闻组中了解到我需要使用“ self 欺骗”管道。
这个场景应该如何实现?
以下帖子的更具体案例:
最佳答案
为什么不使用简单的 FIFO(命名管道)?主进程会自动阻塞,直到它可以读取一些东西。
如果它不应该阻塞,则必须可以进行轮询,但它可能会占用 CPU。可能存在用于此目的的高效库。
我不建议使用信号,因为它们很容易出错。如果您仍然想使用它们,我发现的最简单的方法是:
- 屏蔽每个线程中的所有信号,
- 一个特殊的线程使用
sigwait()
处理信号。它可能必须唤醒另一个线程来处理信号,例如使用条件变量。
优点是您不必再担心从处理程序调用哪个函数是安全的。
关于c++ - 如何将数据从线程传递到父进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/972458/