protected override void OnTick()
{
try {
long curTime = TimeUtility.GetLocalMilliseconds();
if (m_LastTickTime != 0) {
long elapsedTickTime = curTime - m_LastTickTime;
if (elapsedTickTime > c_WarningTickTime) {
LogSys.Log(LOG_TYPE.MONITOR, "RoomThread Tick:{0}", elapsedTickTime);
}
}
m_LastTickTime = curTime;
if (m_LastLogTime + 60000 < curTime) {
m_LastLogTime = curTime;
DebugPoolCount((string msg) => {
LogSys.Log(LOG_TYPE.INFO, "RoomThread.ActionQueue {0}, thread {1}", msg, cur_thread_id_);
});
LogSys.Log(LOG_TYPE.MONITOR, "RoomThread.ActionQueue Current Action {0}", this.CurActionNum);
}
long tick_interval_us = tick_interval_ * 1000;
TimeSnapshot.Start();
DoTick();
long elapsedTime = TimeSnapshot.End();
if (elapsedTime >= tick_interval_us) {
if (elapsedTime >= tick_interval_us * 2) {
LogSys.Log(LOG_TYPE.DEBUG, "*** Warning, RoomThread tick interval is {0} us !", elapsedTime);
foreach (Room room in active_room_) {
Scene scene = room.ActiveScene;
if (null != scene) {
if (scene.SceneState == SceneState.Running) {
SceneProfiler profiler = scene.SceneProfiler;
LogSys.Log(LOG_TYPE.DEBUG, "{0}", profiler.GenerateLogString(scene.SceneResId, scene.GameTime.ElapseMilliseconds));
}
}
}
}
Thread.Sleep(0);
} else {
Thread.Sleep((int)(tick_interval_ - elapsedTime / 1000));
}
} catch (Exception ex) {
LogSys.Log(LOG_TYPE.ERROR, "Exception {0}\n{1}", ex.Message, ex.StackTrace);
}
}