using System; using System.Collections.Generic; using System.Text; using System.Threading; namespace Thousandto.Code.Logic { /// /// 生产者消费者模型线程池 /// public class ChatThreadPool { //处理函数,处理数据 public delegate void HandleFunc(MSG_Chat.ChatResSC nodes); //处理完成回调 public delegate MSG_Chat.ChatResSC FinishCallback(); //待处理的数据 private Queue _dataQueue; //是否工作 private bool _working; //线程个数 private int _threadNum = 1; //处理函数 private HandleFunc _handleFunc; //完成回调 private FinishCallback _finishCallback; private List _threadList; //构造函数 public ChatThreadPool() { _working = true; _dataQueue = new Queue(); _threadList = new List(); //创建线程 for (int i = 0; i < _threadNum; ++i) { Thread workThread = new Thread(workFactory); workThread.IsBackground = true; workThread.Start(); _threadList.Add(workThread); } } public void Destory() { _working = false; _dataQueue.Clear(); _threadList.Clear(); } public void SetHandleFunc(HandleFunc func) { _handleFunc = func; } public void SetFinishFunc(FinishCallback func) { _finishCallback = func; } /// /// 是否有线程存活 /// /// public bool Running() { for (int i = 0; i < _threadList.Count; ++i) { if (_threadList[i].IsAlive) { return true; } } return false; } /// /// 放入数据 /// /// public void AddData(MSG_Chat.ChatResSC data) { _dataQueue.Enqueue(data); } /// /// 线程取数据 /// /// private MSG_Chat.ChatResSC getData() { lock (_dataQueue) { if (_dataQueue != null && _dataQueue.Count > 0) { return _dataQueue.Dequeue(); } return null; } } private void workFactory() { while (_working) { Thread.Sleep(100); MSG_Chat.ChatResSC data = getData(); if (_handleFunc != null) { _handleFunc(data); } if (_finishCallback != null) { _finishCallback(); } } } } }