Exemplo n.º 1
0
        internal override IEnumerable <NativeWorkItem> EnumerateWorkItems()
        {
            IThreadPoolData data = GetThreadPoolData();

            if (_version == DesktopVersion.v2)
            {
                ulong  curr  = data.FirstWorkRequest;
                byte[] bytes = GetByteArrayForStruct <DacpWorkRequestData>();

                while (Request(DacRequests.WORKREQUEST_DATA, curr, bytes))
                {
                    GCHandle            handle = GCHandle.Alloc(bytes, GCHandleType.Pinned);
                    DacpWorkRequestData result = (DacpWorkRequestData)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(DacpWorkRequestData));
                    handle.Free();

                    yield return(new DesktopNativeWorkItem(result));

                    curr = result.NextWorkRequest;
                    if (curr == 0)
                    {
                        break;
                    }
                }
            }
        }
Exemplo n.º 2
0
        private DesktopThreadPool CreateThreadPoolData()
        {
            IThreadPoolData data = GetThreadPoolData();

            if (data == null)
            {
                return(null);
            }

            return(new DesktopThreadPool(this, data));
        }
Exemplo n.º 3
0
 public DesktopThreadPool(DesktopRuntimeBase runtime, IThreadPoolData data)
 {
     _runtime        = runtime;
     _totalThreads   = data.TotalThreads;
     _runningThreads = data.RunningThreads;
     _idleThreads    = data.IdleThreads;
     _minThreads     = data.MinThreads;
     _maxThreads     = data.MaxThreads;
     _minCP          = data.MinCP;
     _maxCP          = data.MaxCP;
     _cpu            = data.CPU;
     _freeCP         = data.NumFreeCP;
     _maxFreeCP      = data.MaxFreeCP;
 }
Exemplo n.º 4
0
 public DesktopThreadPool(DesktopRuntimeBase runtime, IThreadPoolData data)
 {
     m_runtime = runtime;
     m_totalThreads = data.TotalThreads;
     m_runningThreads = data.RunningThreads;
     m_idleThreads = data.IdleThreads;
     m_minThreads = data.MinThreads;
     m_maxThreads = data.MaxThreads;
     m_minCP = data.MinCP;
     m_maxCP = data.MaxCP;
     m_cpu = data.CPU;
     m_freeCP = data.NumFreeCP;
     m_maxFreeCP = data.MaxFreeCP;
 }
Exemplo n.º 5
0
 public DesktopThreadPool(DesktopRuntimeBase runtime, IThreadPoolData data)
 {
     _runtime                = runtime;
     TotalThreads            = data.TotalThreads;
     RunningThreads          = data.RunningThreads;
     IdleThreads             = data.IdleThreads;
     MinThreads              = data.MinThreads;
     MaxThreads              = data.MaxThreads;
     MinCompletionPorts      = data.MinCP;
     MaxCompletionPorts      = data.MaxCP;
     CpuUtilization          = data.CPU;
     FreeCompletionPortCount = data.NumFreeCP;
     MaxFreeCompletionPorts  = data.MaxFreeCP;
 }
Exemplo n.º 6
0
        internal override IEnumerable <NativeWorkItem> EnumerateWorkItems()
        {
            IThreadPoolData data    = GetThreadPoolData();
            ulong           request = data.FirstWorkRequest;

            while (request != 0)
            {
                if (!_sos.GetWorkRequestData(request, out WorkRequestData requestData))
                {
                    break;
                }

                yield return(new DesktopNativeWorkItem(requestData));

                request = requestData.NextWorkRequest;
            }
        }
Exemplo n.º 7
0
        public override ClrThreadPool GetThreadPool()
        {
            if (_threadpool != null)
            {
                return(_threadpool);
            }

            IThreadPoolData data = GetThreadPoolData();

            if (data == null)
            {
                return(null);
            }

            _threadpool = new DesktopThreadPool(this, data);
            return(_threadpool);
        }