Example #1
0
 void IEcsPreInitSystem.PreDestroy()
 {
     for (var i = 0; i < _descs.Length; i++)
     {
         var desc = _descs[i];
         _descs[i] = null;
         desc.Thread.Interrupt();
         desc.Thread.Join(10);
         _syncs[i].Close();
         _syncs[i] = null;
     }
     _filter    = null;
     _worker    = null;
     _localDesc = null;
 }
Example #2
0
        void IEcsPreInitSystem.PreInitialize()
        {
            _filter       = GetFilter();
            _worker       = GetWorker();
            _minJobSize   = GetMinJobSize();
            _threadsCount = GetThreadsCount();
#if DEBUG
            if (_filter == null)
            {
                throw new Exception("GetFilter() returned null");
            }
            if (_minJobSize < 1)
            {
                throw new Exception("GetMinJobSize() returned invalid value");
            }
            if (_threadsCount < 1)
            {
                throw new Exception("GetThreadsCount() returned invalid value");
            }
#endif
            _localDesc = new EcsMultiThreadWorkerDesc(_filter);
            _descs     = new EcsMultiThreadWorkerDesc[_threadsCount];
            _syncs     = new ManualResetEvent[_threadsCount];
            for (var i = 0; i < _descs.Length; i++)
            {
                var desc = new EcsMultiThreadWorkerDesc(_filter);
                desc.Thread = new Thread(ThreadProc);
                desc.Thread.IsBackground = true;
#if DEBUG
                desc.Thread.Name = string.Format("ECS-{0:X}-{1}", this.GetHashCode(), i);
#endif
                desc.HasWork  = new ManualResetEvent(false);
                desc.WorkDone = new ManualResetEvent(true);
                desc.Worker   = _worker;
                _descs[i]     = desc;
                _syncs[i]     = desc.WorkDone;
                desc.Thread.Start(desc);
            }
        }