等待C++的多个事件

Ben*_*ves 5 c++ multithreading posix pthreads

是否有推荐的方法来等待多个输入.例如,我希望我的程序能够从3个来源接收输入:

监听线程条件,例如pthread_cond_wait()

从标准输入获取数据,例如getline()

听套接字例如accept()

完成此任务的最佳方法是什么?我是否需要为每个不同的输入源提供一个线程?谢谢

Nik*_*sov 7

无需单独的线程等待accept(2)stdin-用poll/select在这里.而不是条件变量,在线程之间创建一个管道(如果我们谈论CV,你已经有了线程),在它上面等待它poll并在事件发生时写入它.


Ada*_*eld 4

您可以使用系统调用来侦听多个文件描述符,而无需使用多个线程select(2)。您可以使用pthread_cond_timedwait超时来等待条件变量,这样您就不会等待超过特定的时间。

我认为想要同时等待条件变量或某种文件描述符是非常不寻常的——如果你绝对确定这就是你想要做的,那么你将不得不使用多个线程,其中一个线程调用pthread_cond_wait/ pthread_cond_timedwait,另一个线程调用select或其他一些 I/O 函数。

  • 这很不寻常,因为你不能在 UNIX 上(轻松地)做到这一点。这在 win32 中很常见,等待多个事物(套接字句柄、线程队列、信号量等等)是理所当然的。 (11认同)