也许对于某些人来说,这是一个非常奇怪的问题,但是Qt中的信号和槽系统与LibEvent库有什么区别?因为它们似乎都用于类似的功能。
如果我已经在Qt中有了信号和槽,为什么还需要使用LibEvent?如何更好地管理大量网络连接?例如,我需要在SSL通过TCP服务器中使用LibEvent还是信号和槽?
如果我已经在Qt中有了信号和槽,为什么还需要使用LibEvent?如何更好地管理大量网络连接?例如,我需要在SSL通过TCP服务器中使用LibEvent还是信号和槽?
Qt信号槽和libevent都依赖于回调函数,但它们在机制和用例上有很大的不同。
Qt槽是普通函数。而Qt信号基本上是回调函数的容器,你可以将其想象成std::list<CALLBACK_FUNC>
。
当你“发射”一个信号时,实际上是直接从“发射”中调用每个槽函数。
Qt信号槽基于C/C++函数指针和运行时类型信息(由moc
和Q_OBJECT
魔法生成),
并且可以用于连接任何C++类实例。
Libevent回调函数是从事件循环中调用的,通常你不想直接调用它们。 而libevent回调函数是为预定义的“事件”服务的,你不能将它们用于通用目的。
如果你计划使用网络通信实现Qt应用程序,我建议你可以使用Qt套接字,这样可以很好地集成到Qt事件循环中。
QTcpServer
和QTcpSocket
(确切地说是QSslSocket
)。 - konstantin_doncov