示例#1
0
        public void WaitAllT()
        {
            SmartThreadPool smartThreadPool = new SmartThreadPool();

            bool success = true;

            IWorkItemResult <int>[] wirs = new IWorkItemResult <int> [5];

            for (int i = 0; i < wirs.Length; ++i)
            {
                wirs[i] = smartThreadPool.QueueWorkItem(new Func <int, int, int>(System.Math.Min), i, i + 1);
            }

            SmartThreadPool.WaitAll(wirs);

            for (int i = 0; i < wirs.Length; ++i)
            {
                if (!wirs[i].IsCompleted)
                {
                    success = false;
                    break;
                }

                int result = wirs[i].GetResult();
                if (i != result)
                {
                    success = false;
                    break;
                }
            }

            smartThreadPool.Shutdown();

            Assert.IsTrue(success);
        }
示例#2
0
        public async Task Execute(IJobExecutionContext context)
        {
            if (!IsRunning)
            {
                IsRunning = true;
                baseUrl   = context.JobDetail.JobDataMap.Get("baseUrl").ToString();
                proxyUrl  = context.JobDetail.JobDataMap.Get("proxyUrl").ToString();
                feedNode  = context.JobDetail.JobDataMap.Get("node") as FeedNode;

                Logger.GetLogger(baseUrl).Info("start feed job execute");

                var task = Task.Factory.StartNew(() =>
                {
                    var feeds   = GetFeedJobs(baseUrl, proxyUrl, feedNode);
                    var compile = new UrlCompile();

                    var stpStartInfo = new STPStartInfo
                    {
                        IdleTimeout      = 3000,
                        MaxWorkerThreads = 8,
                        MinWorkerThreads = 0
                    };

                    var pool  = new SmartThreadPool(stpStartInfo);
                    var waits = new List <IWorkItemResult>();

                    foreach (var feed in feeds)
                    {
                        var addrs = compile.GetResult(feed.Address);

                        Logger.GetLogger(baseUrl).Info("compile address " + feed.Address + " result " + string.Join(",", addrs));

                        foreach (var addr in addrs)
                        {
                            feed.Address = addr.ToString();

                            var item = pool.QueueWorkItem((u) =>
                            {
                                DoTask(u, true);
                            }, feed);

                            waits.Add(item);
                        }
                    }

                    SmartThreadPool.WaitAll(waits.ToArray());

                    pool.Shutdown(true, 1000);
                    pool.Dispose();
                    pool = null;
                    waits.Clear();
                });

                await task;

                IsRunning = false;

                Logger.GetLogger(baseUrl).Info("end feed job execute");
            }
        }
示例#3
0
 private void BtnOpen_Click(object sender, EventArgs e)
 {
     btnOpen.Enabled      = false;
     openDir.SelectedPath = appPath;
     if (openDir.ShowDialog() == DialogResult.OK)
     {
         appPath = openDir.SelectedPath;
         OnLoad();
         OnShown();
         var works = waitQueue.ToArray();
         waitQueue.Add(pool.QueueWorkItem(() =>
         {
             try
             {
                 if (works != null && works.Length > 0)
                 {
                     SmartThreadPool.WaitAll(works);
                     waitQueue.RemoveAll(q => works.Contains(q));
                 }
             }
             catch (Exception ex)
             {
                 Console.WriteLine(ex.Message + ex.StackTrace);
             }
             Invoke(new invProcess(AddProcess), new object[] { 100 });
         }));
         single.QueueWorkItem(() => Invoke(new invClear(ChangeStatus)));
     }
     btnOpen.Enabled = true;
 }
示例#4
0
        public void WaitAllWithEmptyArray()
        {
            IWorkItemResult [] wirs = new IWorkItemResult[0];

            bool success = SmartThreadPool.WaitAll(wirs);;

            Assert.IsTrue(success);
        }
示例#5
0
 public bool Wait(int t)
 {
     // We use the integer version of WaitAll because the current version of SmartThreadPool has a bug with the
     // TimeSpan version.  The number of milliseconds in TimeSpan is an int64 so when STP casts it down to an
     // int (32-bit) we can end up with bad values.  This occurs on Windows though curiously not on Mono 2.10.8
     // (or very likely other versions of Mono at least up until 3.0.3).
     return(SmartThreadPool.WaitAll(new IWorkItemResult[] { wr }, t, false));
 }
        public static void UpdatePrice()
        {
            var datenow      = DateTime.Now;
            var lastupdated  = WayBillController.GetLastUpdateTime(path);
            var shippinglist = FreightController.GetShippingMethodList(DateTime.Parse(lastupdated));

            if (shippinglist != null && shippinglist.List != null && shippinglist.List.Count > 0)
            {
                Log.Info("开始同步运输方式!");
                shippinglist.List.ForEach(p => WayBillController.SynchronousShippingMethod(p.ShippingMethodId, p.ShippingMethodTypeId, p.Enabled));
                Log.Info("完成同步运输方式!");
            }
            var list = WayBillController.GetUpdatePriceWayBillList(lastupdated);

            //更新最够更新时间
            LogTime.WriteFile(path, datenow.ToString("yyyy-MM-dd HH:mm:ss"));
            Log.Info(datenow.ToString("yyyy-MM-dd HH:mm:ss"));

            if (list == null || list.Count <= 0)
            {
                return;
            }
            if (ismultithreading.ToLowerInvariant() == "no")
            {
                //单线程
                foreach (var venderPackageModel in list)
                {
                    if (!WayBillController.UpdatePriceWayBill(FreightController.PostVenderPrice(venderPackageModel),
                                                              venderPackageModel.WayBillNumber))
                    {
                        Log.Error(string.Format("运单号:{0}更新错误!", venderPackageModel.WayBillNumber));
                    }
                }
            }
            else if (ismultithreading.ToLowerInvariant() == "yes")
            {
                //多线程
                if (minThreads > maxThreads)
                {
                    maxThreads = minThreads;
                }
                var threadPool = new SmartThreadPool {
                    MaxThreads = maxThreads < 1?1:maxThreads, MinThreads = minThreads < 1?1:minThreads
                };
                var pendingWorkItems = new IWorkItemResult[list.Count];
                for (int i = 0; i < list.Count; i++)
                {
                    pendingWorkItems[i] = threadPool.QueueWorkItem(new WorkItemCallback(MUpdatePrice), list[i]);
                }

                if (SmartThreadPool.WaitAll(pendingWorkItems))
                {
                    threadPool.Shutdown();
                }
            }
        }
示例#7
0
        private void RunConversionPool()
        {
            results.Clear();
            convertPool = SetupSmartThreadPool(settings.ConversionPoolThreads);
            addConversionsToQueue();
            convertPool.Start();
            bool converted = SmartThreadPool.WaitAll(results.ToArray());

            convertPool.Shutdown();

            WriteStatus("conversion Pool completed, success = " + converted.ToString());
        }
示例#8
0
文件: Async.cs 项目: git-thinh/core
        public static void Run(SmartThread.Action task1)
        {
            SmartThreadPool st = new SmartThreadPool();
            IWorkItemResult t1 = st.QueueWorkItem(() =>
            {
                task1();
            });
            bool success = SmartThreadPool.WaitAll(new IWorkItemResult[] { t1 });

            //if (success)  result1 = (int)wir1.Result;
            st.Shutdown();
        }
示例#9
0
        public async Task Execute(IJobExecutionContext context)
        {
            if (!IsRunning)
            {
                IsRunning = true;

                OnStart(context);

                var task = Task.Factory.StartNew(() =>
                {
                    var requests = GetRequests();

                    var stpStartInfo = new STPStartInfo
                    {
                        IdleTimeout      = 3000,
                        MaxWorkerThreads = MaxWorkerThreads,
                        MinWorkerThreads = 0
                    };

                    var pool  = new SmartThreadPool(stpStartInfo);
                    var waits = new List <IWorkItemResult>();

                    foreach (var fr in requests)
                    {
                        if (fr.Request.Headers.Count(m => m.Name == "Referer") == 0)
                        {
                            fr.Request.Headers.Add(new WebHeader("Referer", fr.Request.Uri.AbsoluteUri));
                        }

                        var item = pool.QueueWorkItem((u) =>
                        {
                            var response = DoTask((Request)u.Request);
                            Save(u, response);
                        }, fr);

                        waits.Add(item);
                    }

                    SmartThreadPool.WaitAll(waits.ToArray());

                    pool.Shutdown(true, 1000);
                    pool.Dispose();
                    pool = null;
                    waits.Clear();
                });

                await task;

                IsRunning = false;
            }
        }
示例#10
0
        private void BtnSave_Click(object sender, EventArgs e)
        {
            btnSave.Enabled = false;
            var save = new StringBuilder($"\r\n==当前文件夹/前缀缩写:{shorten}\r\n目录列表:\r\n");
            var wait = waitQueue.ToArray();

            waitQueue.Add(single.QueueWorkItem(() =>
            {
                try
                {
                    SmartThreadPool.WaitAll(wait);
                    waitQueue.RemoveAll(q => wait.Contains(q));
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message + ex.StackTrace);
                }
                var p = Parallel.For(0, clistDirs.Items.Count, i => save.Append(clistDirs.Items[i] + "\r\n"));
                while (!p.IsCompleted)
                {
                    Thread.Sleep(1000);
                }
                save.Append("\r\n文件列表:\r\n");
                p = Parallel.For(0, listBrowse.Items.Count, i => save.Append(listBrowse.Items[i] + "\r\n"));
                while (!p.IsCompleted)
                {
                    Thread.Sleep(1000);
                }
                save.Append("\r\n缺失列表:\r\n");
                p = Parallel.For(0, listLost.Items.Count, i => save.Append(listLost.Items[i] + "\r\n"));
                while (!p.IsCompleted)
                {
                    Thread.Sleep(1000);
                }
                save.Append("\r\n报告:\r\n");
                save.Append(lblStatus.Text);

                var writer        = saveFileFullName.AppendText();
                var reader        = new StringReader(save.ToString() + $"\r\n{DateTime.Now}完成==\r\n");
                int len           = 4096;
                char[] strToWrite = new char[len];
                while (0 < (len = reader.Read(strToWrite, 0, 4096)))
                {
                    writer.Write(strToWrite, 0, len);
                }
                writer.Close();
                reader.Close();
                save.Clear();
            }));
            btnSave.Enabled = true;
        }
示例#11
0
        private void RunDownloadPool(WorkType work)
        {
            //Setup downloadPool
            downloadPool = SetupSmartThreadPool(settings.DownloadPoolThreads);

            //Select the items to add to the queue
            addDownloadTasksToQueue(work);
            downloadPool.Start();

            bool success = SmartThreadPool.WaitAll(results.ToArray());

            downloadPool.Shutdown();

            WriteStatus("Download Pool Completed, succeeded = " + success.ToString());
        }
示例#12
0
        public async Task Execute(IJobExecutionContext context)
        {
            if (!IsRunning)
            {
                IsRunning = true;

                baseUrl = context.JobDetail.JobDataMap.Get("baseUrl").ToString();

                try
                {
                    MoveDelayFeed();

                    var task = Task.Factory.StartNew(() =>
                    {
                        var files = Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory + @"snapshot");

                        var stpStartInfo = new STPStartInfo
                        {
                            IdleTimeout      = 3000,
                            MaxWorkerThreads = 8,
                            MinWorkerThreads = 0
                        };

                        var pool  = new SmartThreadPool(stpStartInfo);
                        var waits = new List <IWorkItemResult>();
                        foreach (var file in files)
                        {
                            var item = pool.QueueWorkItem((fileName) =>
                            {
                                DoTask(fileName);
                            }, file);
                            waits.Add(item);
                        }

                        SmartThreadPool.WaitAll(waits.ToArray());
                        pool.Shutdown(true, 1000);
                        pool.Dispose();
                        pool = null;
                        waits.Clear();
                    });

                    await task;
                }
                catch { }

                IsRunning = false;
            }
        }
示例#13
0
        public async Task Execute(IJobExecutionContext context)
        {
            if (!IsRunning)
            {
                IsRunning = true;

                var task = Task.Factory.StartNew(() =>
                {
                    var proxyUrl = context.JobDetail.JobDataMap.Get("proxyUrl").ToString();
                    var node     = context.JobDetail.JobDataMap.Get("node") as FeedNode;

                    var feeds = GetFeedJobs(proxyUrl, node);

                    var stpStartInfo = new STPStartInfo
                    {
                        IdleTimeout      = 3000,
                        MaxWorkerThreads = 8,
                        MinWorkerThreads = 0
                    };

                    var pool  = new SmartThreadPool(stpStartInfo);
                    var waits = new List <IWorkItemResult>();

                    foreach (var feed in feeds)
                    {
                        var item = pool.QueueWorkItem((u) =>
                        {
                            DoTask(u, true);
                        }, feed);

                        waits.Add(item);
                    }

                    SmartThreadPool.WaitAll(waits.ToArray());
                    pool.Shutdown(true, 1000);
                    pool.Dispose();
                    pool = null;
                    waits.Clear();
                });

                await task;

                IsRunning = false;
            }
        }
示例#14
0
        public void WaitAllWithTimeoutFailure()
        {
            SmartThreadPool smartThreadPool = new SmartThreadPool();

            IWorkItemResult [] wirs = new IWorkItemResult[5];

            for (int i = 0; i < wirs.Length; ++i)
            {
                wirs[i] =
                    smartThreadPool.QueueWorkItem(new WorkItemCallback(this.DoSomeWork), null);
            }

            bool timeout = !SmartThreadPool.WaitAll(wirs, 10, true);
            bool success = timeout;

            smartThreadPool.Shutdown();

            Assert.IsTrue(success);
        }
示例#15
0
        public async Task Execute(IJobExecutionContext context)
        {
            if (!IsRunning)
            {
                IsRunning = true;

                OnStart(context);

                var task = Task.Factory.StartNew(() =>
                {
                    var snapshots = GetSnapshot();

                    var stpStartInfo = new STPStartInfo
                    {
                        IdleTimeout      = 3000,
                        MaxWorkerThreads = MaxWorkerThreads,
                        MinWorkerThreads = 0
                    };

                    var pool  = new SmartThreadPool(stpStartInfo);
                    var waits = new List <IWorkItemResult>();
                    foreach (var snapshot in snapshots)
                    {
                        var item = pool.QueueWorkItem((u) =>
                        {
                            DoTask(u);
                        }, snapshot);

                        waits.Add(item);
                    }

                    SmartThreadPool.WaitAll(waits.ToArray());
                    pool.Shutdown(true, 1000);
                    pool.Dispose();
                    pool = null;
                    waits.Clear();
                });

                await task;

                IsRunning = false;
            }
        }
        public static void UpdatePrice()
        {
            var list = WayBillController.GetUpdatePriceWayBillList();

            if (list == null || list.Count <= 0)
            {
                return;
            }
            if (ismultithreading.ToLowerInvariant() == "no")
            {
                //单线程
                foreach (var model in list)
                {
                    if (!WayBillController.UpdatePriceWayBill(FreightController.GetFreightPrice(model),
                                                              model.WayBillNumber, model.ReceivingExpenseID))
                    {
                        Log.Error(string.Format("运单号:{0}更新错误!", model.WayBillNumber));
                    }
                }
            }
            else if (ismultithreading.ToLowerInvariant() == "yes")
            {
                //多线程
                if (minThreads > maxThreads)
                {
                    maxThreads = minThreads;
                }
                var threadPool = new SmartThreadPool {
                    MaxThreads = maxThreads < 1 ? 1 : maxThreads, MinThreads = minThreads < 1 ? 1 : minThreads
                };
                var pendingWorkItems = new IWorkItemResult[list.Count];
                for (int i = 0; i < list.Count; i++)
                {
                    pendingWorkItems[i] = threadPool.QueueWorkItem(new WorkItemCallback(MUpdatePrice), list[i]);
                }

                if (SmartThreadPool.WaitAll(pendingWorkItems))
                {
                    threadPool.Shutdown();
                }
            }
        }
示例#17
0
        private void RunUpdateFeedPool()
        {
            results.Clear();
            feedPool = SetupSmartThreadPool(settings.UpdateFeedPoolThreads);

            //Add Items
            addFeedsToQueue();
            feedPool.Start();

            SmartThreadPool.WaitAll(results.ToArray());

            feedList.Clear();
            foreach (var r in results)
            {
                feedList.Add((InnerTubeFeed)r.Result);
            }
            feedPool.Shutdown();

            WriteStatus("Update Feeds complete");
        }
示例#18
0
        public void WaitAllWithTimeoutSuccess()
        {
            SmartThreadPool smartThreadPool = new SmartThreadPool();
            IWorkItemsGroup workItemsGroup  = smartThreadPool.CreateWorkItemsGroup(int.MaxValue);

            IWorkItemResult [] wirs = new IWorkItemResult[5];

            for (int i = 0; i < wirs.Length; ++i)
            {
                wirs[i] =
                    workItemsGroup.QueueWorkItem(new WorkItemCallback(this.DoSomeWork), null);
            }

            bool timeout = !SmartThreadPool.WaitAll(wirs, 1500, true);
            bool success = !timeout;

            smartThreadPool.Shutdown();

            Assert.IsTrue(success);
        }
示例#19
0
        /// <summary>
        /// Break |list| into slices of at least |minChunkSize| and schedule them on a thread pool.
        /// |action| is executed on each slice.
        /// </summary>
        public static void ParallelDo <T>(this IList <T> list, Action <IEnumerable <T> > action,
                                          int minChunkSize           = DefaultMinChunkSize,
                                          SmartThreadPool threadPool = null)
        {
            threadPool = threadPool ?? DefaultSmartThreadPool;
            const int maxHandles = 64; // Maximum for WaitHandle
            var       count      = list.Count();

            if (count == 0)
            {
                return;
            }
            // WaitAll() does not support waiting for multiple handles on STA threads.
            if (count < minChunkSize * 2)
            {
                action(list);
                return;
            }
            var parallelism        = Math.Min(maxHandles, Math.Max(1, count / minChunkSize));
            var effectiveChunkSize = count / parallelism;
            var items = new IWorkItemResult[parallelism];

            for (var offset = 0; offset < parallelism; offset++)
            {
                var start = effectiveChunkSize * offset;
                var chunk = list.Skip(start).Take(offset == parallelism - 1 ? count - start : effectiveChunkSize);
                items[offset] = threadPool.QueueWorkItem(() => action(chunk));
            }
            try
            {
                SmartThreadPool.WaitAll(items);
            }
            catch (ThreadInterruptedException ex)
            {
                foreach (var item in items)
                {
                    item.Cancel();
                }
                throw;
            }
        }
示例#20
0
        /// <summary>
        /// 程序入口  朱旺  2018.4.23 add
        /// </summary>
        public void SyncData()
        {
            int Count = GetCount();

            if (Count != 0)
            {
                int Page = Count % Row == 0 ? Count / Row : Count / Row + 1; //第一步计算该开多少个线程
                DeleteTable();                                               //第二步清空表数据
                //第三步多线程执行方法
                using (SmartThreadPool smartThreadPool = new SmartThreadPool())
                {
                    List <IWorkItemResult> wirs = new List <IWorkItemResult>();
                    for (int i = 1; i <= Page; i++)
                    {
                        IWorkItemResult wir = smartThreadPool.QueueWorkItem(new WorkItemCallback(@delegate), i);
                        wirs.Add(wir);
                    }
                    SmartThreadPool.WaitAll(wirs.ToArray());
                }
            }
        }
示例#21
0
        public void ThrottleTest()
        {
            var throttle = new ConcurrencyThrottle {
                MaxValue = 5, Enabled = true
            };
            var maxReg     = new MaxRegister();
            var threadPool = new SmartThreadPool();

            var state = new DoWorkState {
                Throttle = throttle, MaxRegister = maxReg
            };
            var workItemResults = new List <IWaitableResult>();

            for (var i = 0; i < 100; i++)
            {
                workItemResults.Add(threadPool.QueueWorkItem(DoWork, state));
            }

            SmartThreadPool.WaitAll(workItemResults.ToArray());

            Assert.IsTrue(maxReg.MaxValue <= 5);
        }
示例#22
0
        public void WaitAll()
        {
            SmartThreadPool smartThreadPool = new SmartThreadPool();
            IWorkItemsGroup workItemsGroup  = smartThreadPool.CreateWorkItemsGroup(int.MaxValue);

            bool success = true;

            IWorkItemResult [] wirs = new IWorkItemResult[5];

            for (int i = 0; i < wirs.Length; ++i)
            {
                wirs[i] =
                    workItemsGroup.QueueWorkItem(new WorkItemCallback(this.DoSomeWork), null);
            }

            SmartThreadPool.WaitAll(wirs);

            for (int i = 0; i < wirs.Length; ++i)
            {
                if (!wirs[i].IsCompleted)
                {
                    success = false;
                    break;
                }
                else
                {
                    int result = (int)wirs[i].GetResult();
                    if (1 != result)
                    {
                        success = false;
                        break;
                    }
                }
            }

            smartThreadPool.Shutdown();

            Assert.IsTrue(success);
        }
示例#23
0
        public static void TestMultipleSerialization()
        {
            //MessageSharkSerializer.Build();
            var             count           = 10000;
            SmartThreadPool smartThreadPool = new SmartThreadPool();

            IWorkItemResult[] tasks = new IWorkItemResult[count];
            for (var i = 0; i < count; i++)
            {
                SmartThreadPool st = new SmartThreadPool();
                tasks[i] = st.QueueWorkItem(() =>
                {
                    var data = new Message()
                    {
                        ID = 10, CreateDate = DateTime.Now, Data = "This is a test"
                    };
                    var buffer666 = MessageSharkSerializer.Serialize(data);
                    //threads.Add(Thread.CurrentThread.ManagedThreadId);
                });
            }
            bool success = SmartThreadPool.WaitAll(tasks);

            //if (success)  result1 = (int)wir1.Result;
            smartThreadPool.Shutdown();

            //var tasks = new Task[count];
            ////var threads = new ConcurrentBag<int>();
            //for (var i = 0; i < count; i++)
            //{
            //    tasks[i] = Task.Factory.StartNew(() =>
            //    {
            //        var data = new Message() { ID = 10, CreateDate = DateTime.Now, Data = "This is a test" };
            //        var buffer = MessageSharkSerializer.Serialize(data);
            //        //threads.Add(Thread.CurrentThread.ManagedThreadId);
            //    }).ContinueWith(t => Handle(t), TaskContinuationOptions.OnlyOnFaulted)
            //    .ContinueWith(_ => { });
            //}
            //Task.WaitAll(tasks);
        }
示例#24
0
        private void Update()
        {
            if (!_sema.WaitOne(10))
            {
                return;
            }

            var stp = StaticInstance.ThreadPool;
            //stp.MaxThreads = (int) _setti.NumFetchThreads;
            var results = new List <IWaitableResult>();

            foreach (FavShowData t in _setti.TvShows)
            {
                results.Add(stp.QueueWorkItem(data => data.Fetch(), t, true, ThreadPriority.AboveNormal)); //schedule update of show (executed paralell)
            }
            //wait for completion
            stp.QueueWorkItem(() =>
            {
                SmartThreadPool.WaitAll(results.ToArray());
                _sema.Release();

                var updates = _setti.TvShows.Where(show => show.NewEpisodes && !show.Notified).ToList();
                if (updates.Count > 0)
                {
                    updates.ForEach(show => show.Notified = true);

                    if (_setti.ShowNotifications)
                    {
                        Dispatcher.Invoke(() =>
                        {
                            var n              = new NotificationBalloon(updates);
                            n.ShowViewClicked += on_ShowViewClicked;

                            NotifyIcon.ShowCustomBalloon(n, PopupAnimation.Slide, _setti.NotificationTimeout <= 0 ? (int?)null : _setti.NotificationTimeout);
                        });
                    }
                }
            }, true, ThreadPriority.AboveNormal);
        }
示例#25
0
        public void DoWork()
        {
            SmartThreadPool smartThreadPool = new SmartThreadPool();

            IWorkItemResult wir1 =
                smartThreadPool.QueueWorkItem(new
                                              WorkItemCallback(this.DoSomeWork1), null);

            IWorkItemResult wir2 =
                smartThreadPool.QueueWorkItem(new
                                              WorkItemCallback(this.DoSomeWork2), null);

            bool success = SmartThreadPool.WaitAll(new IWorkItemResult [] { wir1, wir2 });

            if (success)
            {
                int result1 = (int)wir1.Result;
                int result2 = (int)wir2.Result;
            }

            smartThreadPool.Shutdown();
        }
示例#26
0
        private void PingButton_OnClick_invoke()
        {
//            PingButton.IsEnabled = false;
            this.Dispatcher.Invoke(() => PingButton.IsEnabled = false);
            threadPool.Cancel();
//            PingDataList.Clear();
            this.Dispatcher.Invoke(() => PingDataList.Clear());
            var select_str = this.Dispatcher.Invoke(() => ComboDomainBox.Text);
            var htmldata   = HttpHelper.GetHtmlTask($"http://ping.chinaz.com/", select_str, new { host = select_str, linetype = "电信,多线,联通,移动,海外" });

            if (String.IsNullOrWhiteSpace(htmldata.Encode))
            {
                this.Dispatcher.Invoke(() => PingButton.IsEnabled = true);
                return;
            }
            var templist = new ObservableCollection <PingData>();

            foreach (var guidLocalKey in htmldata.GuidLocal.Keys)
            {
                templist.Add(new PingData(guidLocalKey, htmldata.GuidLocal[guidLocalKey], select_str));
            }

            this.Dispatcher.Invoke(() => {
                PingDataList             = templist;
                PingDataGrid.ItemsSource = PingDataList;
            });


            List <IWorkItemResult> threadResults = new List <IWorkItemResult>();

            foreach (var guidLocalKey in htmldata.GuidLocal.Keys)
            {
                threadResults.Add(threadPool.QueueWorkItem(new WorkItemCallback(UpdateData), new UpdateDataParams(guidLocalKey, select_str, htmldata.Encode)));
            }
            SmartThreadPool.WaitAll(threadResults.ToArray());
            Task.Factory.StartNew(LocalPing);
            this.Dispatcher.Invoke(() => PingButton.IsEnabled = true);
            //            PingButton.IsEnabled = true;
        }
示例#27
0
        public void ComputeFitnesses()
        {
            int numberOfThreadsX = System.Environment.ProcessorCount;

            if (numberOfThreadsX == 1)
            {
                // Single-threaded implementation
                foreach (Individual i in members)
                {
                    double[] fitness = i.Fitness;
                }
            }
            else
            {
                // Multithreaded implementation
                using (SmartThreadPool pool = new SmartThreadPool(1000, numberOfThreadsX, numberOfThreadsX))
                {
                    IWorkItemResult[] results = new IWorkItemResult[members.Count];
                    for (int i = 0; i < members.Count; ++i)
                    {
                        WorkItemCallback workItem = new WorkItemCallback(this.ComputeFitness);
                        results[i] = pool.QueueWorkItem(workItem, members[i]);
                    }
                    SmartThreadPool.WaitAll(results);
                }
            }

            ComputeParetoRanking();

            // TODO: Ideally this code would be moved elsewhere
            // Sort in descending Pareto Rank order - we want the best
            // individuals at the front of the container
            members.Sort(delegate(Individual lhs, Individual rhs)
            {
                return(rhs.ParetoRank.CompareTo(lhs.ParetoRank));
            });
        }
示例#28
0
 public bool Wait(TimeSpan t)
 {
     return(SmartThreadPool.WaitAll(new IWorkItemResult[] { wr }, t, false));
 }
示例#29
0
        /// <summary>
        /// Runs each installer on every VM in specified by config file
        /// </summary>
        /// <returns>List of all the results from the RemoteInstalls</returns>
        public List <ResultsGroup> Run()
        {
            STPStartInfo poolStartInfo = new STPStartInfo();
            List <IWorkItemResult <IList <IList <ResultsGroup> > > > poolResults = new List <IWorkItemResult <IList <IList <ResultsGroup> > > >();

            // build parallelizable tasks
            ParallelizableRemoteInstallDriverTaskCollections ptasks = new ParallelizableRemoteInstallDriverTaskCollections();

            if (_configuration.VirtualMachines.Count == 0)
            {
                throw new InvalidConfigurationException("Missing virtual machines in configuration.");
            }

            // build the sequence that is going to be run
            foreach (VirtualMachineConfig vm in _configuration.VirtualMachines)
            {
                DriverTaskCollection tasks = new DriverTaskCollection();

                if (vm.Snapshots.Count == 0)
                {
                    throw new InvalidConfigurationException(string.Format("Missing snapshots in {0}. Define a 'current' snapshot with <snapshot name='*' />.",
                                                                          vm.Name));
                }

                switch (_configuration.Installers.Sequence)
                {
                case InstallersSequence.alternate:
                    tasks.Add(new DriverTasks.DriverTask_Alternate(_configuration,
                                                                   _logpath, _simulationOnly, vm, _configuration.Installers, true, true));
                    break;

                case InstallersSequence.install:
                    tasks.Add(new DriverTasks.DriverTask_Alternate(_configuration,
                                                                   _logpath, _simulationOnly, vm, _configuration.Installers, true, false));
                    break;

                case InstallersSequence.uninstall:
                    tasks.Add(new DriverTasks.DriverTask_Alternate(_configuration,
                                                                   _logpath, _simulationOnly, vm, _configuration.Installers, false, true));
                    break;

                case InstallersSequence.fifo:
                    tasks.Add(new DriverTasks.DriverTask_Fifo(_configuration,
                                                              _logpath, _simulationOnly, vm, _configuration.Installers));
                    break;

                case InstallersSequence.lifo:
                    tasks.Add(new DriverTasks.DriverTask_Lifo(_configuration,
                                                              _logpath, _simulationOnly, vm, _configuration.Installers));
                    break;

                case InstallersSequence.clean:
                default:
                    tasks.Add(new DriverTasks.DriverTask_Clean(_configuration,
                                                               _logpath, _simulationOnly, vm, _configuration.Installers));
                    break;
                }

                ptasks.Add(tasks);
            }

            // the number of threads in the pipeline is either user-defined
            // or the number of virtual machines (default)
            if (_pipelineCount > 0)
            {
                poolStartInfo.MaxWorkerThreads = _pipelineCount;
            }
            else
            {
                poolStartInfo.MaxWorkerThreads = ptasks.Count;
            }

            if (ptasks.Count == 0)
            {
                throw new InvalidConfigurationException("Number of tasks cannot be zero.");
            }

            ConsoleOutput.WriteLine(string.Format("Starting {0} parallel installation(s) ({1} max) ...",
                                                  poolStartInfo.MaxWorkerThreads, ptasks.Count));

            SmartThreadPool pool = new SmartThreadPool(poolStartInfo);

            ConsoleOutput.ShowThreadID = (poolStartInfo.MaxWorkerThreads > 1);

            foreach (DriverTaskCollections tasks in ptasks)
            {
                poolResults.Add(pool.QueueWorkItem <DriverTaskCollections, IList <IList <ResultsGroup> > >(
                                    RunTasks, tasks));
            }

            // wait for the pool to finish all the work
            SmartThreadPool.WaitAll(poolResults.ToArray());

            // collect results
            List <ResultsGroup> groups = new List <ResultsGroup>();

            foreach (IWorkItemResult <IList <IList <ResultsGroup> > > poolResult in poolResults)
            {
                foreach (IList <ResultsGroup> poolResultItem in poolResult.GetResult())
                {
                    groups.AddRange(poolResultItem);
                }
            }

            ConsoleOutput.WriteLine("Finished installation(s) with {0} result(s)",
                                    groups.Count);

            return(groups);
        }
示例#30
0
        private void CheckFiles(object checkedObject = null, bool isChecked = false)
        {
            cyborgCheck = false;
            var clist     = new ArrayList(clistDirs.CheckedItems);
            var setStatus = new invClear(ChangeStatus);

            if (checkedObject != null && !isChecked && !clist.Contains(checkedObject))
            {
                clist.Add(checkedObject);
            }
            else
            {
                clist.Remove(checkedObject);
            }
            var waitFor        = waitQueue.ToArray <IWorkItemResult>();
            var browseClear    = new invClear(listBrowse.Items.Clear);
            var lostClear      = new invClear(listLost.Items.Clear);
            var browseAddRange = new invAddRang(listBrowse.Items.AddRange);
            var lostAddRange   = new invAddRang(listLost.Items.AddRange);
            var maxPb          = new invClear(MaxProcess);
            var add            = new invClear(AddProcess);

            Invoke(maxPb);
            var work = pool.QueueWorkItem(() =>
            {
                var browse = new List <FileInfo>();
                var lost   = new List <string>();
                SmartThreadPool.WaitAll(waitFor);
                waitQueue.RemoveAll(q => waitFor.Contains <IWorkItemResult>(q));
                Parallel.For(0, clist.Count, i =>
                {
                    Invoke(maxPb);
                    try
                    {
                        var item = shorten + clist[i].ToString();
                        if (cacheBrowse.ContainsKey(item) && cacheLost.ContainsKey(item))
                        {
                            browse.AddRange(cacheBrowse[item]);
                            lost.AddRange(cacheLost[item]);
                            return;
                        }
                        var files = from f in Dirs[item] orderby f.FullName descending select f;

                        if (files == null || files.Count <FileInfo>() == 0)
                        {
                            return;
                        }
                        Console.WriteLine($"==>{item.GetType()} {item} {files.Count<FileInfo>()}");

                        browse.AddRange(files);
                        var thislLost = CheckContinuous(files.ToArray <FileInfo>());
                        lost.AddRange(thislLost);
                        cacheBrowse[item] = files;
                        cacheLost[item]   = thislLost;
                    }
                    catch (Exception ex)
                    {
                        System.Console.WriteLine(ex.Message + ex.StackTrace);
                    }
                    finally
                    {
                        Invoke(add);
                    }
                });
                Invoke(browseClear);
                Invoke(lostClear);
                Invoke(browseAddRange, new object[] { Array.ConvertAll <FileInfo, string>(browse.ToArray(), f => GetShorten(f.FullName)) });
                Invoke(lostAddRange, new object[] { Array.ConvertAll <string, string>(lost.ToArray(), s => GetShorten(s)) });
                single.QueueWorkItem(() => Invoke(setStatus));
                Invoke(add);
            });

            waitQueue.Add(work);
            Invoke(new invProcess(AddProcess), new object[] { 100 });
            waitQueue.Add(pool.QueueWorkItem(() =>
            {
                SmartThreadPool.WaitAll(new IWaitableResult[] { work });
                Invoke(new invClear(ResetProcess));
                single.QueueWorkItem(() => Invoke(setStatus));
                //Interaction.MsgBox("查询完成!", MsgBoxStyle.Information);
            }));
        }