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);
}
}