download ElapsedTime.cs
Language: C#
License: AL20
Copyright: Copyright 2004-2006 the original author or authors.
LOC: 49
Project Info
ncindy - NCindy is a .NET port of the Cind...work.(ncindy)
Server: Google
Type: svn
...indy\trunk\src\NCindy\Util\
   AbstractDisposable.cs
   AysncCallWrapper.cs
   Configuration.cs
   ElapsedTime.cs
   LangHelper.cs
   LockHelper.cs
   SocketFactory.cs
   ValueTypeWrapper.cs
   WinSock2Wrapper.cs

/*
 * Copyright 2004-2006 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

using System;
using System.Collections.Generic;
using System.Text;

namespace NCindy.Util
{


    /// <summary>
    /// Elapsed time. Use nano time if possible, adjust system time may cause
    /// System.currentTimeMillis() backward.
    /// </summary>
    public sealed class ElapsedTime
    {

        ///<summary>
        /// Provide time.
        /// </summary>
        private interface TimeProvider
        {

            long GetCurrentTime();

            long ToMillisecond(long time);
        }

        private class SimpleProvider : TimeProvider
        {
            public long GetCurrentTime()
            {
                return System.Environment.TickCount;
            }

            public long ToMillisecond(long time)
            {
                return time;
            }

        }

        private static TimeProvider provider = new SimpleProvider();

        private long startTime = provider.GetCurrentTime();

        /// <summary>
        /// Get elapsed time in milliseconds.
        /// </summary>
        /// <returns>elapsed time</returns>
        public long GetElapsedTime()
        {
            return GetElapsedTime(provider.GetCurrentTime());
        }

        private long GetElapsedTime(long currentTime)
        {
            if (startTime > currentTime)
            {
                return provider.ToMillisecond(int.MaxValue + currentTime - startTime);
            }
            else
            {
                return provider.ToMillisecond(currentTime - startTime);
            }
        }

        /// <summary>
        /// Reset start time.
        /// </summary>
        /// <returns>elapsed time</returns>
        public long Reset()
        {
            long currentTime = provider.GetCurrentTime();
            long elapsedTime = GetElapsedTime(currentTime);
            startTime = currentTime;
            return elapsedTime;
        }
    }

}

About Koders | Resources | Downloads | Support | Black Duck | Submit Project | Terms of Service | DMCA | Privacy Policy | Site Map| Contact Us