服务器线程(不断跟新)

m_spNPC = NEWSP(NPC);//NPC加载,如怪物等
m_spNPC->setFT(m_spTimerFactory.get());//共享Map中的定时器,让Map线程来驱动。
m_spNPC->setMapPtr_NPC(this);//一定要先调用地图

看到这个代码让我蛋疼一把,搜了一下m_spTimerFactory也没有看到相应的注册函数,于是看了下setFT:


void NPC::setFT(I_TimerFactory* pFT)
{
m_pFT = pFT;
//[L]模拟怪物移动
m_NpcAITimer.reset(/*GetPlug(TimerFactory)*/m_pFT->createTimer());//Timer::createTimer();
m_NpcAITimer->setInterval(1000);//
m_NpcAITimer->regTimer(std::bind(&NPC::NpcAITimer, this));
m_NpcAITimer->start();
}

原来是NPC中定义了一个std::shared_ptr<I_Timer>
m_NpcAITimer;然后m_spTimerFactory通过调用createTimer()就创建了一个定时器给他然后注册定时器函数,那这个定时器在哪儿驱动的呢?


void thrTransData::thread()
{
MapPkt pkt;
int num = 0;
while (true)
{
if(get_data_from_queue(&pkt))
{
process_pkt(pkt);
num++;
if(num > 30)
{
num = 0;
m_spTimerFactory->driveTimer();
}
continue;
}
{
m_spTimerFactory->driveTimer();
boost::this_thread::interruptible_wait(1);
}
}
}

不知这个线程时Map线程还是thrTranData线程,反正是在这里驱动的,所以才有上面的

//共享Map中的定时器,让Map线程来驱动。

服务器线程(不断跟新),布布扣,bubuko.com

时间: 2024-10-17 15:30:04

服务器线程(不断跟新)的相关文章

服务器线程与包关系(不断跟新)

先画个大概的,思路先理清一下,细节还有很多.这个是服务器比较关键的.其实是只要和地图有关的,GS线程直接扔给map里面,然后接收响应的数据,感觉GS像个桥梁的作用. 服务器线程与包关系(不断跟新),布布扣,bubuko.com

Java5对线程处理的新操作-concurrent包介绍

上节中简单介绍了传统的jdk中的线程的概念,本节中接着介绍下jdk5之后对线程处理有哪些改变. 首先,介绍下java.util.concurrent包下有个字包atomic(原子的)包,其中的一些类提供原子性操作类,分别是: 1 AtomicBoolean, 2 AtomicInteger,AtomicIntegerArray,AtomicIntegerFieldUpdater<T>, 3 AtomicLong,AtomicLongArray,AtomicLongFieldUpdater<

Netty服务器线程模型概览

一切从ServerBootstrap开始ServerBootstrap 负责初始话netty服务器,并且开始监听端口的socket请求. bootstrap bootstrap = new ServerBootstrap( new NioServerSocketChannelFactory( Executors.newCachedThreadPool(),//boss线程池 Executors.newCachedThreadPool()//worker线程池 ) ); bootstrap.set

在子线程中创建新的窗体,遇到的问题。

场景: 服务端的应用程序创建了一个线程来接收客户端发来的消息,当接收到消息后,需要弹出一个新的窗体,作为响应操作等. 现象: 新创建的窗体呈现挂起.假死,或者一闪而过的现象. 原因: 新创建的响应窗体是由子线程创建的,而.net平台下,子线程执行完毕后,会自动释放资源,同样的,这个新创建的窗体也会被释放掉.若是这个线程处于监听或者一些其他的连续执行状态,那么,这个窗体就会出现假死状态. 解决方案: 可以在子线程中调用一个代码段,而这个代码段通过invoke方法回答主线程中去创建和现实Form2,

服务器线程并发和进程并发

进程和线程的使用在前面博文已经讲述完毕,在完成一个最简单的服务器之后,就是要考虑下如何实现并发服务器了. 要实现服务的并发,只能通过进程和线程两种方式. 之前提到过listen_fd和connect_fd,listen用于监听是否有客户端连接,维护两个fd队列,没完成握手的和完成就绪的. connect从就绪队列取描述符,这个connect_fd描述符将用于数据通信,所以要实现并发,就是将connect_fd分发到线程或进程上,由他们去独立完成通信. 在实际并发服务器应用场合,在IO层大多通过两

Swing中耗时任务需要另起新线程,这个新线程中更新GUI的操作仍需由EDT来做(转)

最近调试程序时发现,点击某个界面时会出现卡死的情况,出现的频率还是比较频繁的. 再次出现卡死的情况后,利用jvisualvm查看线程的运行情况,dump操作之后发现线程间出现了死锁:Found one Java-level deadlock:============================="Thread-122":  waiting to lock monitor 0x484052e4 (object 0x1af2bb08, a com.raisecom.ems.temple

java并发之如何向已有的线程安全类添加新功能--java并发编程实践

添加一个新原子操作的最安全的方式是,修改原始的类,以支持期望的操作.但是你可能无法访问源代码或者没有修改的自由,所以通常是不可能的.即使你可以修改原始的类,也需要理解其实现的同步策略,才能在维持原有设计的前提下完善它的功能.直接向类中加入新方法,意味着所有实现类同步策略的代码仍然包含在一个源代码文件中,因此便于理解与维护. 另一种方法是扩展这个类.因为扩展后,同步策略的实现会被分布到多个独立维护的源代码文件中,所以 扩展一个类比直接在类中加入代码更脆弱.如果底层的类选择了不同的锁保护它的状态变量

xampp搭建服务器环境、html5新的input类型

怎么让别人看见你写的 先把你的文档放入htdocs里面 再输入网址: http://你的IP地址/文件名 就ok了例如我的 HTML5中的input类型: <input>标签规定用户可输入数据的类型.根据不同的type 属性,输入类型有多种形态,输入字段可以使文本字段.复选框.密码字段.单选按钮.按钮等等.html5为我们提供了更丰富的input类型.如下: 1.email email类型用于包含e-mail地址的输入域,在提交表单时,会自动验证email域的值. iPhone中的Safari

android 三种网络通信接口及各个接口的代码示例

第一部分 Android网络基础 Android平台浏览器采用了WeBKit引擎,这款名为Chorme Lite的Web浏览器拥有强大扩展特性,每个开发者都以为编写自己的插件,使得浏览器的功能更加完善. 目前Android平台有3种网络接口. 第一种 java.net.*(标准java接口) 此接口提供与联网有关的类,包括流和数据包套接字.Internet协议.常见HTTP处理.如:创建URL以及URLConnection/HttpURLConnection对象.设置连接参数.连接服务器.向服务