#include<thread>#include<iostream>#include<list>usingnamespace std;//成员函数作为线程函数的方法来写线程classA{public://线程一:从玩家收到的消息入到一个队列的线程voidinMsgRecvQueue(){for(int i =0; i <100000;++i){
cout <<"inMsgRecvQueue()执行,插入一个元素"<< i << endl;
msgRecvQueue.push_back(i);}}//线程二:把数据从消息队列取出的线程voidoutMsgRecvQueue(){for(int i =0; i <100000;++i){if(!msgRecvQueue.empty()){//返回第一个元素,但不检查元素是否存在int command = msgRecvQueue.front();//移除第一个元素,但不返回
msgRecvQueue.pop_front();//考虑处理数据......}else{
cout <<"outMsgRecvQueue()执行,但目前消息队列为空"<< i << endl;}}}private://容器。专用于代表玩家发送过来的命令
list<int> msgRecvQueue;};intmain(){//数据共享:网络游戏服务器//有两个自己创建的线程//一个线程:收集玩家发来的命令(简化问题:用一个数字代表),将命令数据写入一个队列//一个线程:从队列中取出玩家发送来的命令,解析,执行玩家要干的动作//使用list:容器(和vector内部的实现手法是不一样的)//频繁的按照顺序插入和删除数据时list效率高//对于随意插入和删除数据时vector效率高
A myobja;//第二个参数时引用,才能保证线程里,用的时同一个对象
thread myOutMsgobj(&A::outMsgRecvQueue,&myobja);
thread myInMsgobj(&A::inMsgRecvQueue,&myobja);
myOutMsgobj.join();
myInMsgobj.join();return0;}