分享

用C++11简化线程间通信

 quasiceo 2014-01-17

用C++11简化线程间通信

目前的服务器会使用多线程,线程间通过消息(队列)进行通信和协作。
协作的原理是:
消息具有一个type字段:表示此消息的类型,线程会有一个回调函数数组,当收到消息队列的消息,根据其type查找其回调函数来处理此消息。
消息还有一个buf缓冲区,具体的回调函数将其转型为特定的类型(供其逻辑处理所需)

这样做现在看来是很麻烦的:
为了让另外一个线程做某件事情,需要咱定义一个type,以及其附加数据类型。
虽感觉有点在所难免,但现在有了C++ 11,完全可以采用新的方式来简化:
将消息队列中的消息设置为std::function,而不是以前的thread_msg {type,data}。
得到消息队列的消息时直接进行调用()。

生产者则是直接push一个std::function,这可以通过两种方式:
1:std::bind
2:lanmbda

这样就无需定义type类型了,而且如果采用lambda,则可以直接利用闭包的性质绑定变量,而无需额外定义任何数据类型。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多