Beispiel #1
0
        private void StartTeachingThreads()
        {
            int threadCount      = Math.Min(imagesToTeach.Count, 2 * Environment.ProcessorCount);
            int threadPart       = imagesToTeach.Count / threadCount;
            var barrier          = new Barrier(threadCount, item => isTeaching = false);
            var threadParameters = new TeachThreadParameter[threadCount];

            for (int i = 0; i < threadCount; ++i)
            {
                threadParameters[i] = new TeachThreadParameter(
                    threadPart * i, ((i + 1) < threadCount) ? (threadPart * (i + 1)) : (imagesToTeach.Count),
                    barrier);
                ThreadPool.QueueUserWorkItem(new WaitCallback(TeachThread), threadParameters[i]);
            }
        }
Beispiel #2
0
        private void TeachThread(object parameter)
        {
            TeachThreadParameter input = parameter as TeachThreadParameter;

            if (input == null)
            {
                throw new ArgumentNullException("Неправильный параметр потока.");
            }

            var delta = 1.0 / filesToTeach.Count;

            for (int i = input.From; (i < input.To) && (!isTeachingAborted); ++i)
            {
                try
                {
                    var image     = new SimpleImage(imagesToTeach[i]);
                    var imageData = image.GetGrayData();
                    var lbp       = new LBPCreator(imageData, true, true, false);
                    var glcm      = new GLCMCreator(imageData, true, true, false);
                    AddFeatures(glcm.Feature, lbp.Feature, filesToTeach[i]);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    continue;
                }
                finally
                {
                    lock ((knownFiles as ICollection).SyncRoot)
                    {
                        teachProgress += delta;
                    }
                }
            }
            input.CommonBarrier.SignalAndWait();
        }
 private void StartTeachingThreads()
 {
     int threadCount = Math.Min(imagesToTeach.Count, 2 * Environment.ProcessorCount);
     int threadPart = imagesToTeach.Count / threadCount;
     var barrier = new Barrier(threadCount, item => isTeaching = false);
     var threadParameters = new TeachThreadParameter[threadCount];
     for (int i = 0; i < threadCount; ++i)
     {
         threadParameters[i] = new TeachThreadParameter(
             threadPart * i, ((i + 1) < threadCount) ? (threadPart * (i + 1)) : (imagesToTeach.Count),
             barrier);
         ThreadPool.QueueUserWorkItem(new WaitCallback(TeachThread), threadParameters[i]);
     }
 }