提交 4bee499b 编写于 作者: cdy816's avatar cdy816

增加退出保存数据功能。以及Sim仿真多线程赋值。

上级 b444ee29
......@@ -91,7 +91,14 @@ namespace Cdy.Tag
Scan();
}
if (DataFileManager.CurrentDateTime.ContainsKey(FId))
{
DataFileManager.CurrentDateTime[FId] = mLastTime;
}
else
{
DataFileManager.CurrentDateTime.Add(FId, mLastTime);
}
}
......
......@@ -23,11 +23,17 @@ namespace DBInRun
}
}
Console.WriteLine(Res.Get("HelpMsg"));
while (!mIsClosed)
{
Console.Write(">");
string[] cmd = Console.ReadLine().Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
string smd = Console.ReadLine();
if (string.IsNullOrEmpty(smd)) continue;
string[] cmd = smd.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
if (cmd.Length == 0) continue;
......
......@@ -123,6 +123,7 @@ namespace Cdy.Tag
/// </summary>
public void Start()
{
mIsClosed = false;
mHisTagService = ServiceLocator.Locator.Resolve<IHisEngine>();
Init();
......@@ -139,7 +140,7 @@ namespace Cdy.Tag
/// </summary>
public void Stop()
{
mIsClosed = false;
mIsClosed = true;
resetEvent.Set();
closedEvent.WaitOne();
......@@ -151,6 +152,7 @@ namespace Cdy.Tag
foreach(var vv in mTargetMemorys)
{
while (vv.Value.IsBusy()) Thread.Sleep(1);
vv.Value.Dispose();
}
mTargetMemorys.Clear();
......@@ -236,6 +238,9 @@ namespace Cdy.Tag
}
closedEvent.Set();
LoggerService.Service.Info("Compress", "压缩线程退出!");
}
#endregion ...Methods...
......
......@@ -168,6 +168,8 @@ namespace Cdy.Tag
Dictionary<int, long> dtmp = new Dictionary<int, long>();
this.MakeMemoryBusy();
//更新数据区域
foreach(var vv in mTagAddress)
{
......@@ -192,7 +194,7 @@ namespace Cdy.Tag
ServiceLocator.Locator.Resolve<IDataSerialize>().RequestToSeriseFile(this, mCurrentTime);
sw.Stop();
LoggerService.Service.Info("SeriseEnginer", Id+ "压缩完成 耗时:"+sw.ElapsedMilliseconds);
LoggerService.Service.Info("CompressEnginer", Id+ "压缩完成 耗时:"+sw.ElapsedMilliseconds);
}
/// <summary>
......
......@@ -120,8 +120,13 @@ namespace Cdy.Tag
private int mMergeCount = 0;
private bool mNeedSnapAllTag=false;
private DateTime mSnapAllTagTime = DateTime.Now;
private bool mForceSubmiteToCompress = false;
private bool mMegerProcessIsClosed = false;
#endregion ...Variables...
#region ... Events ...
......@@ -497,7 +502,7 @@ namespace Cdy.Tag
public void Start()
{
mIsClosed = false;
mMegerProcessIsClosed = false;
if (LogManager != null)
{
LogManager.InitHeadData(this.mHisTags);
......@@ -563,7 +568,7 @@ namespace Cdy.Tag
{
resetEvent.WaitOne();
resetEvent.Reset();
if (mIsClosed) return;
//if (mIsClosed) return;
if(mNeedSnapAllTag)
{
......@@ -575,7 +580,7 @@ namespace Cdy.Tag
//如果合并满了,则提交给压缩流程进行压缩
count++;
if(count>=number)
if(count>=number || mForceSubmiteToCompress)
{
if (mMergeMemory != null)
......@@ -585,7 +590,7 @@ namespace Cdy.Tag
mMergeMemory.MakeMemoryBusy();
//提交到数据压缩流程
ServiceLocator.Locator.Resolve<IDataCompress>().RequestToCompress(mMergeMemory);
LoggerService.Service.Info("Record", "提交内存 " + mMergeMemory.Name + " 进行压缩",ConsoleColor.Green);
LoggerService.Service.Info("HisEnginer", "提交内存 " + mMergeMemory.Name + " 进行压缩",ConsoleColor.Green);
//等待压缩完成
while(mMergeMemory.IsBusy()) Thread.Sleep(1);
......@@ -594,6 +599,9 @@ namespace Cdy.Tag
count = 0;
}
}
LoggerService.Service.Info("HisEnginer", "合并线程退出!" , ConsoleColor.Green);
mMegerProcessIsClosed = true;
}
/// <summary>
......@@ -834,15 +842,29 @@ namespace Cdy.Tag
mIsBusy = false;
}
/// <summary>
///
/// </summary>
public void Stop()
private void SubmitLastDataToSave()
{
mNeedSnapAllTag = true;
mForceSubmiteToCompress = true;
mIsClosed = true;
SubmiteMemory(DateTime.Now);
while (!mMegerProcessIsClosed) Thread.Sleep(1);
}
/// <summary>
///
/// </summary>
public void Stop()
{
mRecordTimer.Stop();
if(mRecordTimer!=null)
{
mRecordTimer.Elapsed -= MRecordTimer_Elapsed;
mRecordTimer.Dispose();
mRecordTimer = null;
}
......@@ -858,16 +880,22 @@ namespace Cdy.Tag
vv.Stop();
vv.Dispose();
}
mValueChangedProcesser.Clear();
if (LogManager != null) LogManager.Stop();
mValueChangedProcesser.Clear();
SubmitLastDataToSave();
mIsClosed = true;
mLastValueChangedProcesser = null;
mLastProcesser = null;
mHisTags.Clear();
mCachMemory1?.Dispose();
mCachMemory2?.Dispose();
mMergeMemory?.Dispose();
}
/// <summary>
......
......@@ -195,6 +195,8 @@ namespace Cdy.Tag
LoggerService.Service.Info("LogManager", "记录"+ mNeedSaveMemory1.Name +"到日志文件 耗时" + sw.ElapsedMilliseconds + " ");
}
closedEvent.Set();
LoggerService.Service.Info("LogManager", "退出!");
}
/// <summary>
......
......@@ -56,7 +56,7 @@ namespace Cdy.Tag
private DateTime mCurrentTime;
private SeriseFileItem[] mSeriseFile;
//private SeriseFileItem[] mSeriseFile;
private Dictionary<int, CompressMemory> mWaitForProcessMemory = new Dictionary<int, CompressMemory>();
......@@ -205,6 +205,7 @@ namespace Cdy.Tag
/// </summary>
public void Start()
{
mIsClosed = false;
Init();
resetEvent = new ManualResetEvent(false);
closedEvent = new ManualResetEvent(false);
......@@ -218,14 +219,17 @@ namespace Cdy.Tag
/// </summary>
public void Stop()
{
mIsClosed = false;
mIsClosed = true;
resetEvent.Set();
closedEvent.WaitOne();
foreach (var vv in mSeriseFile)
if (mSeriserFiles != null)
{
vv.Dispose();
foreach (var vv in mSeriserFiles)
{
vv.Value.Dispose();
}
mSeriserFiles.Clear();
}
mSeriseFile = null;
resetEvent.Dispose();
closedEvent.Dispose();
......
......@@ -11,6 +11,7 @@ using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Linq;
using System.Diagnostics;
namespace Cdy.Tag
{
......@@ -33,7 +34,7 @@ namespace Cdy.Tag
/// </summary>
private Dictionary<long, long> mCount = new Dictionary<long, long>();
public const int MaxTagCount = 100000;
public const int MaxTagCount = 50000;
private int mCurrentCount = 0;
......@@ -99,7 +100,8 @@ namespace Cdy.Tag
if (mIsBusy)
{
mBusyCount++;
if(Id==0)
//if(Id==0)
if(mBusyCount>4)
LoggerService.Service.Warn("Record", "TimerMemoryCacheProcesser"+Id+" 出现阻塞:"+mBusyCount);
}
else
......@@ -127,7 +129,7 @@ namespace Cdy.Tag
{
mIsClosed = true;
resetEvent.Set();
closedEvent.WaitOne(1000);
closedEvent.WaitOne();
}
/// <summary>
......@@ -184,6 +186,7 @@ namespace Cdy.Tag
try
{
mIsBusy = true;
foreach (var vv in vkeys)
{
mCount[vv] += HisEnginer.MemoryTimeTick;
......@@ -193,6 +196,7 @@ namespace Cdy.Tag
ProcessTags(mTimerTags[vv]);
}
}
mIsBusy = false;
}
catch
......@@ -202,6 +206,8 @@ namespace Cdy.Tag
resetEvent.Reset();
}
closedEvent.Set();
LoggerService.Service.Info("TimerMemoryCacheProcesser", Id + " 退出");
}
......@@ -211,11 +217,24 @@ namespace Cdy.Tag
/// <param name="tags"></param>
private void ProcessTags(List<HisRunTag> tags)
{
//Stopwatch sw = new Stopwatch();
//sw.Start();
int tim = (int)((mLastUpdateTime - HisRunTag.StartTime).TotalMilliseconds / HisEnginer.MemoryTimeTick);
//System.Threading.Tasks.Parallel.ForEach(tags, (vv) =>
//{
// vv.UpdateValue(tim);
//});
foreach (var vv in tags)
{
vv.UpdateValue(tim);
}
//{
//sw.Stop();
// LoggerService.Service.Info("ProcessTags", "TimerMemoryCacheProcesser" + Id + " 处理变量:" +tags.Count+" " + sw.ElapsedMilliseconds);
//}
}
/// <summary>
......
......@@ -129,7 +129,7 @@ namespace Cdy.Tag
{
mIsClosed = true;
resetEvent.Set();
closedEvent.WaitOne(1000);
closedEvent.WaitOne();
}
/// <summary>
......@@ -261,6 +261,7 @@ namespace Cdy.Tag
resetEvent.Reset();
}
closedEvent.Set();
LoggerService.Service.Info("ValueChangedMemoryCacheProcesser", Name + " 退出");
}
/// <summary>
......
......@@ -27,6 +27,8 @@ namespace SimDriver
private DateTime mLastProcessTime = DateTime.Now;
private int mBusyCount = 0;
#endregion ...Variables...
#region ... Events ...
......@@ -113,29 +115,49 @@ namespace SimDriver
if (mIsBusy)
{
mBusyCount++;
if(mBusyCount>=10)
LoggerService.Service.Warn("Sim Driver", "出现阻塞");
return;
}
mBusyCount = 0;
mIsBusy = true;
DateTime time = DateTime.Now;
if ((time - mLastProcessTime).Seconds < 1)
{
mIsBusy = false;
return;
}
mLastProcessTime = time;
mNumber++;
mNumber = mNumber > (short)360 ? (short)0 : mNumber;
//#if DEBUG
// Stopwatch sw = new Stopwatch();
// sw.Start();
//#endif
//#if DEBUG
// Stopwatch sw = new Stopwatch();
// sw.Start();
//#endif
double fval = Math.Cos(mNumber / 180.0 * Math.PI);
double sval = Math.Sin(mNumber / 180.0 * Math.PI);
Log("Sim:Sin " + fval + " " + "Sim:Cos " + sval + " "+ "Sim:step " + mNumber +" "+ DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
Log("Sim:Sin " + fval + " " + "Sim:Cos " + sval + " " + "Sim:step " + mNumber + " " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
//foreach (var vv in mTagIdCach)
//{
// if (vv.Key == "Sim:cos")
// {
// mTagService.SetTagValue(vv.Value, fval);
// }
// else if (vv.Key == "Sim:sin")
// {
// mTagService.SetTagValue(vv.Value, sval);
// }
// else if (vv.Key == "Sim:step")
// {
// mTagService.SetTagValue(vv.Value, mNumber);
// }
//}
foreach (var vv in mTagIdCach)
System.Threading.Tasks.Parallel.ForEach(mTagIdCach, (vv) =>
{
if (vv.Key == "Sim:cos")
{
......@@ -149,28 +171,13 @@ namespace SimDriver
{
mTagService.SetTagValue(vv.Value, mNumber);
}
}
//System.Threading.Tasks.Parallel.ForEach(mTagIdCach, (vv) => {
// if (vv.Key == "Sim:cos")
// {
// mTagService.SetTagValue(vv.Value, fval);
// }
// else if (vv.Key == "Sim:sin")
// {
// mTagService.SetTagValue(vv.Value, sval);
// }
// else if (vv.Key == "Sim:step")
// {
// mTagService.SetTagValue(vv.Value, mNumber);
// }
//});
});
//#if DEBUG
// sw.Stop();
//#if DEBUG
// sw.Stop();
// LoggerService.Service.Info("Sim Driver","set value elapsed:"+ sw.ElapsedMilliseconds +" total count:"+mNumber+" cos:"+ Math.Cos(mNumber / 180.0 * Math.PI)+" sin:"+ Math.Sin(mNumber / 180.0 * Math.PI));
//#endif
// LoggerService.Service.Info("Sim Driver", "set value elapsed:" + sw.ElapsedMilliseconds + " total count:" + mNumber + " cos:" + Math.Cos(mNumber / 180.0 * Math.PI) + " sin:" + Math.Sin(mNumber / 180.0 * Math.PI));
//#endif
mIsBusy = false;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册