Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在libevent中共享回调_C++_Sockets_Libevent - Fatal编程技术网

C++ 如何在libevent中共享回调

C++ 如何在libevent中共享回调,c++,sockets,libevent,C++,Sockets,Libevent,我使用libevent创建的大多数应用程序都涉及一个读取回调,每当为请求打开新连接时,我都会使用::event_new()分配一个新事件,然后通过::event_add()将该事件添加到事件库中 但问题是,每次打开一个新请求时,我都会分配内存并将其添加到事件循环中,而实际上我应该为文件描述符共享回调和事件。假定内存分配不是此类应用程序的瓶颈,libevent是否提供了与多个文件描述符共享事件的方法?您不应该在文件描述符之间共享事件。这会在你的应用程序中造成混乱event\u new()创建附加到

我使用libevent创建的大多数应用程序都涉及一个读取回调,每当为请求打开新连接时,我都会使用
::event_new()
分配一个新事件,然后通过
::event_add()
将该事件添加到事件库中


但问题是,每次打开一个新请求时,我都会分配内存并将其添加到事件循环中,而实际上我应该为文件描述符共享回调和事件。假定内存分配不是此类应用程序的瓶颈,libevent是否提供了与多个文件描述符共享事件的方法?

您不应该在文件描述符之间共享事件。这会在你的应用程序中造成混乱
event\u new()
创建附加到文件描述符的事件


您可以尝试使用
event\u assign()
重新分配已用事件,但libevent文档明确指出,不建议这样做。另外,在某种类型的池中管理已用事件可能不像看上去那么简单,而且可能不会有任何明显的性能提升。

在您的问题中,
为文件描述符共享回调和事件是什么意思?内存分配对于存储连接状态以进行处理是不可避免的。
事件的状态与任何其他事件完全不同。您如何共享这些功能以实现不同的功能?还有,
文件描述符
在未使用(关闭)时会被操作系统重新用于
选择
轮询
epoll
,等等。你能详细说明一下你到底想做什么吗?@Azeem我问,因为我所有的读取事件都是相同的,除了等待的文件描述符之外。你能给出一个代码示例吗?请用一些支持代码的例子来编辑你的问题。你能举例说明你所说的混乱是什么意思吗?除了给定的文件描述符之外,我创建的所有读取事件都是相同的。我只是想了解snd模式的正确用法,这里事件绑定到套接字,并在该套接字上触发事件。将事件附加到多个活动套接字将导致未定义的行为。这意味着你的程序要么马上爆炸,要么以一种未定义的方式运行——这意味着从那时起任何类型的错误都可能发生,比如在错误的套接字上触发的事件、死套接字、内存泄漏、无法跟踪的内存损坏等等。