public UserCmdParallelExecuteManagerSystem(IGameModule gameModule, IUserCmdExecuteSystemHandler handler, IGameStateProcessorFactory gameStateProcessorFactory, int threadCount) { _systems = new List <IUserCmdExecuteSystem>(); _taskInfos = new List <TaskInfo>(); _systems.Add(new UserCmdPreExecuteSystem(gameStateProcessorFactory)); _systems.AddRange(gameModule.UserCmdExecuteSystems); _systems.Add(new UserCmdPostExecuteSystem()); _handler = handler; int count = _systems.Count; _systemsPool = new List <IUserCmdExecuteSystem> [threadCount]; InitTask(threadCount, count); _mainThread = new WorkThread("Main", _systems); WorkThread[] slaveThreads = new WorkThread[threadCount]; for (var i = 0; i < threadCount; i++) { slaveThreads[i] = new WorkThread("Slave", _systemsPool[i]); } _taskDisparcher = new TaskDispatcher(threadCount, _mainThread, slaveThreads, _taskInfos); _mainThread.Name = "MainThread"; _mainThread.SetTaskDisparcher(_taskDisparcher); for (var i = 0; i < threadCount; i++) { slaveThreads[i].SetTaskDisparcher(_taskDisparcher); slaveThreads[i].Name = string.Format("SlaveThreads:{0}", i); } _taskDisparcher.Start(); }
void Update() { if (m_operationDelay > 0.0f) { m_operationDelay -= Time.fixedDeltaTime; return; } if (m_operations.Count > 0) { EOperation op = m_operations.Dequeue(); m_operationDelay = DEFAULT_OPERATION_DELAY; m_onGoingOperations.Add(new WorkThread(op, DEFAULT_OPERATION_TIMEOUT)); } for (int i = m_onGoingOperations.Count - 1; i >= 0; --i) { WorkThread work = m_onGoingOperations[i]; if (work.state == EWorkingState.DONE) { m_onGoingOperations.RemoveAt(i); } else { CommitOperation(work); } } }
static void Main(string[] args) { //得到这两个月的OA数据 var t = DateTime.Today; t = t.AddDays(-40); oahelper.GetData(t); var delcount = DB.Context.DeleteAll <Dos.Model.original>(); log._logger.Info($"清楚考勤原有记录{delcount}条"); var Device = new WorkThread("192.168.4.31", 4370);//You can custom the LAN Segment. Device.Connect(); Device.GetUser(); Device.GetLog(); Device.DisConnect(); Device = new WorkThread("192.168.4.32", 4370); //You can custom the LAN Segment. Device.Connect(); Device.GetUser(); Device.GetLog(); Device.DisConnect(); }
private void CommitOperation(WorkThread work) { switch (work.op) { case EOperation.INIT: OpInit(work); break; case EOperation.LOG_IN: OpLogIn(work); break; case EOperation.INVITE_FRIENDS: OpInviteFriends(work); break; case EOperation.MY_INFO: OpMyInfo(work); break; case EOperation.POST_TO_WALL: OpPostToWall(work); break; } if (work.state == EWorkingState.ONGOING) { work.timeout -= Time.fixedDeltaTime; if (work.timeout <= 0.0f) { work.state = EWorkingState.DONE; } } }
void OpInviteFriends(WorkThread work) { if (!IsLoggedIn) { work.state = EWorkingState.DONE; return; } if (work.state == EWorkingState.START) { work.state = EWorkingState.ONGOING; FB.AppRequest( to: null, filters: "", excludeIds: null, message: "Castle Attack is awesome! Check it out!", title: "Play Castle Attack with me!", callback: (result) => { work.state = EWorkingState.DONE; } ); } }
void OpMyInfo(WorkThread work) { if (!IsLoggedIn) { work.state = EWorkingState.DONE; return; } if (work.state == EWorkingState.START) { work.state = EWorkingState.ONGOING; FB.API("/me?fields=name", Facebook.HttpMethod.GET, (result) => { Dictionary <string, object> pairs = Json.Deserialize(result.Text) as Dictionary <string, object>; object nameH; if (pairs.TryGetValue("name", out nameH)) { m_facebookName = (string)nameH; } Debug.Log("My id: " + FB.UserId + "\nMy name: " + m_facebookName); work.state = EWorkingState.DONE; }); } }
public static void asyncExecInit() { if (bgWorker == null) { bgWorker = new WorkThread(); } }
void OpLogIn(WorkThread work) { if (!IsFunctional) { work.state = EWorkingState.DONE; return; } if (IsLoggedIn) { work.state = EWorkingState.DONE; Operate(EOperation.MY_INFO); return; } if (work.state == EWorkingState.START) { work.state = EWorkingState.ONGOING; FB.Login("", (result) => { if (FB.IsLoggedIn) { Operate(EOperation.MY_INFO); } work.state = EWorkingState.DONE; }); } }
public static void AddWorker(ThreadManager threadManager) { Interlocked.Increment(ref threadManager.activeThreads); var worker = new WorkThread(threadManager); var thread = new Thread(worker.Loop); thread.SetApartmentState(ApartmentState.STA); thread.Start(); }
private Thread DeleteThread() { int i = workers.Count - 1; WorkThread worker = (WorkThread)workers[i]; worker.Stop(); workers.RemoveAt(i); return(worker.Thread); }
protected virtual void Dispose(bool disposing) { ReleaseUnmanagedResources(); if (disposing) { if (WorkBytesEvent != null) { WorkBytesEvent.Dispose(); } if (OrigBytesEvent != null) { OrigBytesEvent.Dispose(); } if (DelayBytesEvent != null) { DelayBytesEvent.Dispose(); } if (WorkEnergyEvent != null) { WorkEnergyEvent.Dispose(); } if (FreqWaveEvent != null) { FreqWaveEvent.Dispose(); } if (OrigThread != null) { OrigThread.Abort(); if (OrigThread.ThreadState != ThreadState.Aborted) { Thread.Sleep(100); } } if (DelayThread != null) { DelayThread.Abort(); } if (WorkThread != null) { WorkThread.Abort(); if (WorkThread.ThreadState != ThreadState.Aborted) { Thread.Sleep(100); } } if (EnergyThread != null) { EnergyThread.Abort(); } if (FreqThread != null) { FreqThread.Abort(); } } }
private void GetItems() { ArrayList itemarr = new ArrayList(); ArrayList arr = null; StringBuilder sb = new StringBuilder(); try { arr = MemCachedManager.GetStats(serverList, MemCachedManager.Stats.Items, null); if (arr.Count == 0) { this.frm.备份ToolStripMenuItem1.Enabled = true; this.frm.还原ToolStripMenuItem.Enabled = true; WriteState("没有找到数据!"); return; } if (arr == null) { WriteState("连接服务器异常!"); return; } } catch (Exception ex) { WriteState(ex.Message.ToString()); } foreach (string a in arr) { string[] tmparr = a.Split(':'); if (tmparr.Length > 1) { int item_id = 0; int.TryParse(tmparr[1], out item_id); bool find = false; foreach (int item in itemarr) { if (item == item_id) find = true; } if (!find && item_id > 0 && item_id != 11211) itemarr.Add(item_id); } } WriteState("获取Item 成功" + itemarr.Count + "个Item!"); foreach (int item in itemarr) { WorkThread wt = null; wt = new WorkThread(item, new Help(0, 1, 0, true)); wt.frm = this; wt.arrayList = serverList; dic.Add(item, wt); wt.Run(); } }
private void CreateThread() { WorkThread worker = new WorkThread(this); workers.Add(worker); Thread thread = new Thread(new ThreadStart(worker.Start)); thread.Name = "WT #" + workers.Count; thread.IsBackground = true; worker.Thread = thread; thread.Start(); }
private void workThreadSuccessCallback(WorkThread input) { this.workThreads.Remove(input); this.result += input.result; if (this.workThreads.Count == 0) { formShowResult method = new formShowResult(this.formShowResultImpl); this.Invoke(method); } }
// Operations void OpInit(WorkThread work) { if (work.state == EWorkingState.START) { work.state = EWorkingState.ONGOING; FB.Init(() => { m_isFunctional = true; work.state = EWorkingState.DONE; }); } }
/// <summary> /// Disables the updater. /// </summary> public void Disable() { IsEnabled = false; if (WorkThread == null) { return; } if (WorkThread.ThreadState == ThreadState.Running) { WorkThread.Abort(); } WorkThread = null; }
private void button1_Click(object sender, EventArgs e) { this.result = 0; this.workThreads.Clear(); for (int i = 1; i <= 4; i++) { WorkThread threadImpl = new WorkThread(new Action <int>(this.workThreadCallback), new Action <WorkThread>(this.workThreadSuccessCallback)); threadImpl.thread.Start(); this.workThreads.Add(threadImpl); } }
/// <summary> /// 开始工作 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> /// <param name="parameters"></param> private void WorkStart(object sender, EventArgs e, object[] parameters) { var page = (int)parameters[0]; //总页数 var pageSize = (int)parameters[1]; //每页大小 for (int i = 0; i < page; i++) { var thread = new WorkThread(new object[] { i *pageSize, pageSize }); thread.WorkThread_Completed += WorkThread_Completed; thread.WorkThread_DoWork += WorkThread_DoWork; //设定工作内容 thread.Start(); //启动工作线程 _worker.Threads.Add(thread); } }
private void Awake() { Instence = this; cache_int = new ArrayCache <int>(); cache_v2 = new ArrayCache <Vector2>(); cache_v3 = new ArrayCache <Vector3>(); cache_chunk = new Stack <Chunk>(); chunk_map = new Dictionary <long, Chunk>(); remove_queue = new Queue <Chunk>(); add_queue = new Queue <Chunk>(); m_TotalMeshSegmentNum = MeshPieceNum * MeshPieceSegment; m_MeshSegmentSize = ChunkSize / m_TotalMeshSegmentNum; m_thread_work = new WorkThread(); AddChunk(0, 0); }
public DataFlowBuilder BuildConsumers() { for (int i = 0; i < _consumerThreadsCount; i++) { var consumer = DataFlowFactory.CreateConsumer(_executionContext, _arguments.DataFlow); var workThread = new WorkThread(consumer.StartConsuming); workThread.CommandException += (sender, args) => { _logger.Fatal(((DataProcessingExceptionEventArgs)args).Exception); Console.WriteLine("\r\nAn exception occured while processing data. Check logs for details"); _executionContext.StopExecution(); }; _threads.Add(workThread); } return(this); }
private void Free(IList indexs) { if (indexs == null) { throw new ArgumentNullException("indexs"); } if (indexs.Count != 0) { for (int i = 0; i < indexs.Count; i++) { int state = (int)indexs[i]; if (state != -1) { WorkThread.QueueItem(new WaitCallback(this.FreeItem), state); } } } }
static void Main(string[] args) { int iWorkCount = 254;//the ultimate count of devices in LAN WorkThread[] Device=new WorkThread[iWorkCount]; bool bSetMaxThread = ThreadPool.SetMaxThreads(iWorkCount, 500); if (!bSetMaxThread) { Console.WriteLine("Setting max threads of the threadpool failed!"); } for (int i = 0; i < iWorkCount; i++) { Device[i] = new WorkThread("192.168.0." + ((int)(1 + i)).ToString(), 4370);//You can custom the LAN Segment. ThreadPool.QueueUserWorkItem(Device[i].ThreadPoolCallBack);//Put the method into the queue to implement. } Console.WriteLine("Pls Wait for a moment......Current Time:" + DateTime.Now.ToLongTimeString()); //Wait for keyboard input before exiting the program. In order to see the debugging output. If there is no this sentence, the command window will flash by. Console.ReadKey(); }
internal void CallBack(SyncContext syncContext, WorkThread workThread) { this.workThread = workThread; try { syncContext.IncrementCallbackCount(); this.callback(state); } finally { syncContext.DecrementCallbackCount(); // 任意一个工作项执行完后将 RunContext.Current、SecurityContext.Current 重设,确保后续工作项不误用前一工作项的相关上下文 // 此处的调用与 IOCInstanceProvider.GetInstance 中的调用是成对的 RunContext.ResetCurrent(); SecurityContext.ResetCurrent(); this.waitHandle.Set(); } }
public DataFlowBuilder BuildProducer() { var producer = DataFlowFactory.CreateProducer(_executionContext, _arguments.DataFlow); var workThread = new WorkThread(producer.StartProducing); workThread.CommandException += (sender, args) => { _logger.Fatal(((DataProcessingExceptionEventArgs)args).Exception); Console.WriteLine("\r\nAn exception occured while reading data. Check logs for details"); _executionContext.StopExecution(); }; producer.ProgressChanged += (sender, e) => { Console.Write("\rCompleted " + ((ProgressChangedEventArgs)e).PercentageCompleted + "%"); }; _threads.Add(workThread); return(this); }
private void CheckItem(object state) { if (state == null) { throw new ArgumentNullException("state"); } string[] files = null; FileInfo info = null; ISupportFileCached cached = null; cached = state as ISupportFileCached; if (cached != null) { files = cached.Files; if (files.Length != 0) { for (int i = 0; i < files.Length; i++) { if (File.Exists(files[i])) { try { info = new FileInfo(files[i]); if (info.LastWriteTime > this._dateTimeLastChecked) { WorkThread.QueueItem(new WaitCallback(cached.FileReload), files[i]); } } catch { } } } } } }
void OpPostToWall(WorkThread work) { if (!IsLoggedIn) { work.state = EWorkingState.DONE; return; } if (work.state == EWorkingState.START) { work.state = EWorkingState.ONGOING; FB.Feed( linkCaption: "I scored " + PlayerStash.Instance.CurrentScore + " in Castle Attack! Can you beat it?", picture: "http://kinoastudios.com/CastleDefender/logolarge.jpg", linkName: "Beat me at Castle Attack!", link: "http://www.facebook.com/pages/Kinoastudios/397813703654774", callback: (result) => { work.state = EWorkingState.DONE; } ); } }
void OpInviteFriends(WorkThread work) { if( !IsLoggedIn ) { work.state = EWorkingState.DONE; return; } if( work.state == EWorkingState.START ) { work.state = EWorkingState.ONGOING; FB.AppRequest( to: null, filters : "", excludeIds : null, message: "Castle Attack is awesome! Check it out!", title: "Play Castle Attack with me!", callback: (result) => { work.state = EWorkingState.DONE; } ); } }
private WorkThread StartThread() { WorkThread workThread = new WorkThread(this); this.workThreads[workThread.ManagedThreadId] = workThread; workThread.Start(); return workThread; }
private void StartThread() { thread = new WorkThread(ThreadWork); thread.Start(); }
internal WorkItem GetNextWorkItem(WorkThread workThread) { // 贪婪算法,只要队列中存在请求,就返回以执行,跳过 semaphore.WaitOne 的等待过程,这可确保尽可能快的把所有请求处理完 if (this.workItems.Count > 0) { lock (this.sync4workItems) { if (this.workItems.Count > 0) { return this.workItems.Dequeue(); } } } // 收到信号但未找到可以执行的工作项(信号相关的工作项已被别的线程执行), // 如果空闲线程数超过 minPoolSize,则说明线程已经多余,杀掉此线程 if (this.WorkThreadsCount - this.callBackCount > this.MinPoolSize) { lock (this.sync4workThreads) { this.StopThread(workThread); } return null; } this.semaphore.WaitOne(15000); return null; }
private void StopThread(WorkThread workThread) { workThread.Stop(); this.workThreads.Remove(workThread.ManagedThreadId); }
internal void OnWorkThreadAborted(WorkThread workThread) { lock (this.sync4workThreads) { this.StopThread(workThread); } }
private void CommitOperation(WorkThread work) { switch( work.op ) { case EOperation.INIT: OpInit(work); break; case EOperation.LOG_IN: OpLogIn(work); break; case EOperation.INVITE_FRIENDS: OpInviteFriends(work); break; case EOperation.MY_INFO: OpMyInfo(work); break; case EOperation.POST_TO_WALL: OpPostToWall(work); break; } if( work.state == EWorkingState.ONGOING ) { work.timeout -= Time.fixedDeltaTime; if( work.timeout <= 0.0f ) { work.state = EWorkingState.DONE; } } }
// Operations void OpInit(WorkThread work) { if( work.state == EWorkingState.START ) { work.state = EWorkingState.ONGOING; FB.Init(() => { m_isFunctional = true; work.state = EWorkingState.DONE; }); } }
public void Start() { if (!active) { InternalStart(); thread = new WorkThread(DoWork); thread.Start(); active = true; } }
void OpLogIn(WorkThread work) { if( !IsFunctional ) { work.state = EWorkingState.DONE; return; } if( IsLoggedIn ) { work.state = EWorkingState.DONE; Operate(EOperation.MY_INFO); return; } if( work.state == EWorkingState.START ) { work.state = EWorkingState.ONGOING; FB.Login("", (result) => { if( FB.IsLoggedIn ) { Operate(EOperation.MY_INFO); } work.state = EWorkingState.DONE; }); } }
void OpPostToWall(WorkThread work) { if( !IsLoggedIn ) { work.state = EWorkingState.DONE; return; } if( work.state == EWorkingState.START ) { work.state = EWorkingState.ONGOING; FB.Feed( linkCaption: "I scored " + PlayerStash.Instance.CurrentScore + " in Castle Attack! Can you beat it?", picture: "http://kinoastudios.com/CastleDefender/logolarge.jpg", linkName: "Beat me at Castle Attack!", link: "http://www.facebook.com/pages/Kinoastudios/397813703654774", callback: (result) => { work.state = EWorkingState.DONE; } ); } }
void OpMyInfo(WorkThread work) { if( !IsLoggedIn ) { work.state = EWorkingState.DONE; return; } if( work.state == EWorkingState.START ) { work.state = EWorkingState.ONGOING; FB.API("/me?fields=name", Facebook.HttpMethod.GET, (result) => { Dictionary<string, object> pairs = Json.Deserialize(result.Text) as Dictionary<string, object>; object nameH; if( pairs.TryGetValue("name", out nameH) ) { m_facebookName = (string)nameH; } Debug.Log("My id: " + FB.UserId + "\nMy name: " + m_facebookName); work.state = EWorkingState.DONE; }); } }
/// <summary> /// </summary> /// <param name="arSelected"></param> /// <param name="arOpts"></param> private static void ShellStopHelper(DataGridViewSelectedRowCollection arSelected, out List<string> arOpts) { arOpts = null; int iWorkCount = arSelected.Count; if (iWorkCount < 5) { foreach (DataGridViewRow dsvc in arSelected) { object obj = dsvc.DataBoundItem; var objz = (WmiServiceObj) obj; bool aRet = ShellHelper.SwitchServiceStatusTo(objz, ServiceControllerStatus.Stopped); if (arOpts == null) arOpts = new List<string>(); arOpts.Add(string.Format("{0}->{1}\n", objz.Name, aRet ? "succ" : "fail")); } } else { // const int thrCou = 4; //并发数 double xt = Math.Ceiling(iWorkCount/(float) thrCou); //周期数 var device = new WorkThread[thrCou]; bool bSetMaxThread = ThreadPool.SetMaxThreads(thrCou, thrCou*2); if (!bSetMaxThread) { Console.WriteLine("Setting max threads of the threadpool failed!"); } for (int i = 0; i < xt; i++) { for (int j = 0; j < thrCou; j++) { int iPoint = i*thrCou + j; if (iPoint >= iWorkCount) break; if (arSelected[iPoint].Cells.Count > 1) { var obj = arSelected[iPoint]; var objTmp = (WmiServiceObj) obj.DataBoundItem; device[j] = new WorkThread(objTmp); ThreadPool.QueueUserWorkItem(device[j].ThreadPoolCallBack); } } } Console.WriteLine("Pls Wait for a moment......Current Time:{0}", DateTime.Now.ToLongTimeString()); // } }
/** * 分词<br> * 此方法是线程安全的 * * @param text 待分词文本 * @return 单词列表 */ public List <Term> seg(String text) { char[] charArray = text.ToCharArray(); if (HanLP.Config.Normalization) { CharTable.normalization(charArray); } if (config.threadNumber > 1 && charArray.Length > 10000) // 小文本多线程没意义,反而变慢了 { List <String> sentenceList = SentencesUtil.toSentenceList(charArray); String[] sentenceArray = sentenceList.ToArray(); //noinspection unchecked List <Term>[] termListArray = new List <Term> [sentenceArray.Length]; int per = sentenceArray.Length / config.threadNumber; WorkThread[] threadArray = new WorkThread[config.threadNumber]; for (int i = 0; i < config.threadNumber - 1; ++i) { int from = i * per; //threadArray[i] = new WorkThread(sentenceArray, termListArray, from, from + per); //threadArray[i].start(); } threadArray[config.threadNumber - 1] = new WorkThread(sentenceArray, termListArray, (config.threadNumber - 1) * per, sentenceArray.Length); //threadArray[config.threadNumber - 1].start(); try { foreach (WorkThread thread in threadArray) { //thread.join(); } } catch (Exception e) { //logger.severe("线程同步异常:" + TextUtility.exceptionToString(e)); //return Collections.emptyList(); } List <Term> termList = new List <Term>(); if (config.offset || config.indexMode) // 由于分割了句子,所以需要重新校正offset { int sentenceOffset = 0; for (int i = 0; i < sentenceArray.Length; ++i) { foreach (Term term in termListArray[i]) { term.offset += sentenceOffset; termList.Add(term); } sentenceOffset += sentenceArray[i].Length; } } else { foreach (List <Term> list in termListArray) { termList.AddRange(list); } } return(termList); } // if (text.length() > 10000) // 针对大文本,先拆成句子,后分词,避免内存峰值太大 // { // List<Term> termList = new LinkedList<Term>(); // if (config.offset || config.indexMode) // { // int sentenceOffset = 0; // for (String sentence : SentencesUtil.toSentenceList(charArray)) // { // List<Term> termOfSentence = segSentence(sentence.toCharArray()); // for (Term term : termOfSentence) // { // term.offset += sentenceOffset; // termList.add(term); // } // sentenceOffset += sentence.length(); // } // } // else // { // for (String sentence : SentencesUtil.toSentenceList(charArray)) // { // termList.addAll(segSentence(sentence.toCharArray())); // } // } // // return termList; // } return(segSentence(charArray)); }