CommandDesk.cs
1.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
using OS.Spin.Common.MultiThread;
using OS.Spin.Modle.Command;
using System.Collections.Generic;
using System.Threading;
namespace OS.Spin.Commands
{
public class CommandDesk
{
private static CommandDesk _cDk;
private static readonly object ObjLock = new object();
private SemaphorePool _semaphorePool;
private Thread _runThread;
private Queue<CommandKey> _commandKeys = new Queue<CommandKey>();
public static CommandDesk GetInstance()
{
lock (ObjLock)
{
return _cDk ?? (_cDk = new CommandDesk());
}
}
private CommandDesk()
{
// 申请信号量
_semaphorePool = OS.Spin.Common.MultiThread.SemaphorePool.GetInstance();
_semaphorePool.MakeSemaphore(OS.Spin.Running.Infos.Names.S_COMMAND_RUN);
if (null == _runThread)
{
_runThread = new Thread(Run);
_runThread.Start();
}
}
private void Run()
{
while (true)
{
_semaphorePool.Wait(OS.Spin.Running.Infos.Names.S_COMMAND_RUN);
if (_commandKeys.Count > 0)
{
// 获取指令
var key = _commandKeys.Dequeue();
// 执行指令
//DoExcute(key);
}
}
}
public void Execute(CommandKey key)
{
_commandKeys.Enqueue(key);
_semaphorePool.Release(OS.Spin.Running.Infos.Names.S_COMMAND_RUN);
}
}
}