You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.4 KiB
80 lines
2.4 KiB
using System; |
|
using System.Collections; |
|
using System.Collections.Generic; |
|
using System.Linq; |
|
using System.Text; |
|
using System.Threading; |
|
using System.Threading.Tasks; |
|
|
|
namespace KGIS.Framework.ThreadManager |
|
{ |
|
public class ThreadManager |
|
{ |
|
public static ThreadManager Instance { get; } = new ThreadManager(); |
|
private List<CustomThread<object>> Threads = new List<CustomThread<object>>(); |
|
private int _ActiveCount; |
|
public int ActiveCount |
|
{ |
|
get |
|
{ |
|
return Threads.FindAll(f => !((f.CurrThread.ThreadState & ThreadState.Stopped) == ThreadState.Stopped)).Count; |
|
} |
|
} |
|
private int _MaxThreadNum = -1; |
|
public int MaxThreadNum |
|
{ |
|
get |
|
{ |
|
if (_MaxThreadNum == -1) |
|
{ |
|
_MaxThreadNum = Environment.ProcessorCount; |
|
} |
|
return _MaxThreadNum; |
|
} |
|
set |
|
{ |
|
_MaxThreadNum = value; |
|
} |
|
} |
|
public ThreadManager() |
|
{ |
|
|
|
} |
|
|
|
///<summary> |
|
///静态方法,开启或唤醒一个线程去执行指定的回调方法 |
|
///</summary> |
|
///<param name="waitCallback">委托实例</param> |
|
///<param name="obj">传递给回调方法的参数</param> |
|
///<param name="timeOut">当没有可用的线程时的等待时间,以毫秒为单位</param> |
|
///<returns></returns> |
|
public CustomThread<T> QueueUserWorkItem<T>(TaskCallback<T> waitCallback, T obj, TaskCallback<T> completeCallback = null, int timeOut = 10000) |
|
{ |
|
//锁住共享资源,实现线程安全 |
|
lock (Threads) |
|
{ |
|
try |
|
{ |
|
var t = new CustomThread<T>(); |
|
t.Start<T>(waitCallback, obj, completeCallback); |
|
//Threads.Add(t); |
|
return t; |
|
|
|
} |
|
finally |
|
{ |
|
//Monitor.Exit(Threads); |
|
} |
|
} |
|
} |
|
public static void InitThreadList() |
|
{ |
|
//Threads = new ArrayList(); |
|
//for (int i = 0; i < 1; i++) |
|
//{ |
|
// CustomThread t = new CustomThread(); |
|
// Threads.Add(t); |
|
//} |
|
} |
|
} |
|
}
|
|
|