예제 #1
0
        /// <summary>
        /// Tries to query measured process times.
        /// </summary>
        /// <param name="ptr">Process handle.</param>
        /// <param name="processTimes">Measured process times.</param>
        /// <returns>True if received the process times.</returns>
        internal static bool TryGetProcessTimes(IntPtr ptr, out ProcessTimes processTimes)
        {
            processTimes = new ProcessTimes();

            System.Runtime.InteropServices.ComTypes.FILETIME lpCreationTime, lpExitTime, lpKernel, lpUser;

            bool result = GetProcessTimes(ptr, out lpCreationTime, out lpExitTime, out lpKernel, out lpUser);

            if (!result)
            {
                Console.Error.WriteLine("Unable to query process time.");
                return(false);
            }

            DateTime creation = DateTime.FromFileTime(ComFileTimeToTicks(lpCreationTime));
            DateTime exit     = DateTime.FromFileTime(ComFileTimeToTicks(lpExitTime));

            processTimes = new ProcessTimes(PreciseTimeSpan.FromTicks((exit - creation).Ticks),
                                            PreciseTimeSpan.FromTicks(ComFileTimeToTicks(lpUser)),
                                            PreciseTimeSpan.FromTicks(ComFileTimeToTicks(lpKernel)));

            return(true);
        }
 public AcquireTask(FixedChannelPool pool, TaskCompletionSource <IChannel> promise)
 {
     this.pool       = pool;
     this.Promise    = promise;
     this.ExpireTime = PreciseTimeSpan.FromTicks(Stopwatch.GetTimestamp()) + pool.acquireTimeout;
 }
            public void Run()
            {
                Contract.Assert(this.pool.executor.InEventLoop);
                while (true)
                {
                    if (!this.pool.pendingAcquireQueue.TryPeek(out AcquireTask task) || PreciseTimeSpan.FromTicks(Stopwatch.GetTimestamp()) < task.ExpireTime)
                    {
                        break;
                    }

                    this.pool.pendingAcquireQueue.TryDequeue(out _);

                    --this.pool.pendingAcquireCount;
                    this.onTimeout(task);
                }
            }
예제 #4
0
 internal ProcessTimes(long wallTimeTicks, long userTimeTicks, long kernelTimeTicks)
 {
     WallTime   = PreciseTimeSpan.FromTicks(wallTimeTicks);
     UserTime   = PreciseTimeSpan.FromTicks(userTimeTicks);
     KernelTime = PreciseTimeSpan.FromTicks(kernelTimeTicks);
 }