目前的服务器会使用多线程,线程间通过消息(队列)进行通信和协作。 协作的原理是: 消息具有一个type字段:表示此消息的类型,线程会有一个回调函数数组,当收到消息队列的消息,根据其type查找其回调函数来处理此消息。 消息还有一个buf缓冲区,具体的回调函数将其转型为特定的类型(供其逻辑处理所需)
这样做现在看来是很麻烦的: 为了让另外一个线程做某件事情,需要咱定义一个type,以及其附加数据类型。 虽感觉有点在所难免,但现在有了C++ 11,完全可以采用新的方式来简化: 将消息队列中的消息设置为std::function,而不是以前的thread_msg {type,data}。 得到消息队列的消息时直接进行调用()。
生产者则是直接push一个std::function,这可以通过两种方式: 1:std::bind 2:lanmbda
这样就无需定义type类型了,而且如果采用lambda,则可以直接利用闭包的性质绑定变量,而无需额外定义任何数据类型。
|