UNIX C++中的用户事件

UNIX C++中的用户事件,c++,multithreading,unix,C++,Multithreading,Unix,我正在尝试将我的多线程windows应用程序移植到Unix。在我的申请中,我们有用户创建的事件,用于向线程发送执行特定任务的信号。我发现可以使用条件变量或信号量来向线程发送信号。我的要求是根据请求创建动态事件,但这对于条件变量或信号量是不可行的。请帮助我在Unix中使用类似信号概念的事件。Posix线程允许您使用互斥和条件在线程之间进行通信。man pthreads、man pthread_cond_wait和其他 另一种生成事件的方法不依赖于线程和描述符。 请参见人工投票、人工投票、人工选择

我正在尝试将我的多线程windows应用程序移植到Unix。在我的申请中,我们有用户创建的事件,用于向线程发送执行特定任务的信号。我发现可以使用条件变量或信号量来向线程发送信号。我的要求是根据请求创建动态事件,但这对于条件变量或信号量是不可行的。请帮助我在Unix中使用类似信号概念的事件。

Posix线程允许您使用互斥和条件在线程之间进行通信。man pthreads、man pthread_cond_wait和其他

另一种生成事件的方法不依赖于线程和描述符。 请参见人工投票、人工投票、人工选择

在C中手动实现事件系统可能需要一些时间,因此有一些库正在实现事件系统,如libev、libuv、libevent、libevent2

<>如果你想要更多的C++,那么你可以使用Boost类似的Booo::信号。不知道是否有其他或Qt,其中内置了完整的信号/插槽机制和事件系统。但它需要相当大的依赖性

如果您想要完全实现的事件队列和许多interprise特性,您可以查看任何AMQP框架,如rabbitmq


如果没有特定的问题,很难告诉您需要什么。

我不明白为什么使用条件变量或信号量是不可行的。我正在创建一些事件集,并将事件句柄存储在队列中。线程将从队列中获取事件,并使用该事件向其他线程发送信号。在这里,一个线程将在windows、WaitForMultipleObjects中等待多个信号,但这对于条件变量是不可行的。他们不会监听多个信号。如果你坚持在事件中像在Windows中一样,当然这对Unix是不可行的,因为它甚至不存在于Unix中。但是,如果您想要的是能够实现与WaitForMultipleObjects相同的目标,那么有很多方法可以实现。i、 您可以将事件集更改为信号量或并发队列,并告诉所有工作线程等待它。它不是多个线程,它的单个线程等待设置多个事件,一旦设置,线程将执行定义的任务。我有一个线程将等待设置多个事件。WaitForMultipleObjects8,lup_ReleaseParam->msp_获取事件,FALSE,1。在Unix中,我没有为多事件信号找到等效的等待方法。如果使用条件变量pthread\u cond\u wait&cond和mutex,则不会侦听多个事件。请指导我对其进行排序out@vanith55你读过我提到的其他可能性吗?我不熟悉Windows编程,但根据msdn和您的假参数,您希望在事件发生时处理它,而不是等待所有时间。因此,您可以使用poll-select或epoll中的一种来执行此操作。您可以创建管道see man pipe或SOCKETPARE see man SOCKETPARY,并在线程中使用写描述符来表示线程已完成任务,并将所有读取描述符设置为事件函数poll、epoll和主线程中的select以获取事件。但我强烈建议使用我在博文中写的库。