コード例 #1
0
            private void SlowTimerCallback(object state)
            {
                try
                {
                    int       start = m_timerTickStart;
                    GameTimer timer = m_currentTimer;
                    if (timer == null)
                    {
                        return;
                    }

                    StringBuilder str = new StringBuilder("=== Timer already took ", 1024);
                    str.Append(GetTickCount() - start).Append("ms\n");
                    str.Append(timer.ToString());
                    str.Append("\n\n");
                    str.Append("Timer thread:\n");
                    str.Append(Util.FormatStackTrace(Util.GetThreadStack(m_timeThread)));

                    string packetStacks = PacketHandler.PacketProcessor.GetConnectionThreadpoolStacks();
                    if (packetStacks.Length > 0)
                    {
                        str.Append("\n\nPackethandler threads:\n");
                        str.Append(packetStacks);
                    }

                    str.Append("\n\nNPC update thread:\n");
                    str.Append(Util.FormatStackTrace(WorldMgr.GetNpcUpdateStacktrace()));

                    str.Append("\n\nRelocation thread:\n");
                    str.Append(Util.FormatStackTrace(WorldMgr.GetRelocateRegionsStacktrace()));

                    str.Append("\n\n");

                    lock (m_delayLog)
                    {
                        m_delayLog.Write(str.ToString());
                        m_delayLog.Flush();
                    }
                }
                catch (Exception e)
                {
                    if (log.IsWarnEnabled)
                    {
                        log.Warn("collecting/writing timer delays", e);
                    }
                }
            }