Files
cms_thermo_active/Step.Core/ThreadsHandler.cs
T
Lucio Maranta 724ac2afb8 Merge branch 'feature/Scada' into develop
# Conflicts:
#	Client.Utils/Constants.cs
#	Client/View/NcWindow.cs
#	Libs/CMS_CORE_Library.dll
#	Step.Config/Config/serverConfig.xml
#	Step.Core/ThreadsFunctions.cs
#	Step.Model/Constants.cs
#	Step.Model/DTOModels/AlarmModels/DTOAlarmHistoricModel.cs
#	Step.Model/DatabaseModels/NcMagazinePositionModel.cs
#	Step.Model/Step.Model.csproj
2019-01-15 16:58:18 +01:00

106 lines
3.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Threading;
using TeamDev.SDK.MVVM;
using static Step.Model.Constants;
namespace Step.Core
{
public static class ThreadsHandler
{
private static List<Action> ThreadsFunctionsList = new List<Action>
{
ThreadsFunctions.ReadAlarms,
ThreadsFunctions.ReadPowerOnData,
ThreadsFunctions.StatThread,
ThreadsFunctions.ReadProcessesPPStatus,
ThreadsFunctions.ReadEnabledFunctionality,
ThreadsFunctions.ReadExpiredMaintenances,
ThreadsFunctions.ReadAxesPositionsData,
ThreadsFunctions.ReadMagazinesStatus,
ThreadsFunctions.ReadUserSoftKeysData,
ThreadsFunctions.ReadHeadsData,
ThreadsFunctions.ReadAxesNamesData,
ThreadsFunctions.ReadActiveProgramData,
ThreadsFunctions.UpdateToolsData,
ThreadsFunctions.ReadNcMagazineActive,
ThreadsFunctions.ReadPartProgramQueueData,
ThreadsFunctions.ReadScadaData
// ThreadsFunctions.ReadNcSoftKeysData,
};
private volatile static List<Thread> RunningThreadsList = new List<Thread>();
internal volatile static Dictionary<string, string> RunningThreadStatus = new Dictionary<string, string>();
private static Thread MonitorNetworkResources;
public static void Start()
{
ThreadsFunctions.RestoreConnection();
// Start Thread Network monitor
Action Monitor = new Action(ThreadsFunctions.MonitorPanelPCResources);
MonitorNetworkResources = new Thread(() => Monitor());
MonitorNetworkResources.Start();
}
public static void StartWorkers()
{
lock (RunningThreadStatus)
RunningThreadStatus.Clear();
// For each function run in the list a thread
ThreadsFunctionsList.ForEach(threadFunction =>
{
// Run new Thread in the list
Thread t = new Thread(() =>
threadFunction()
);
t.Start();
// Add thread to running threads list
lock (RunningThreadsList)
RunningThreadsList.Add(t);
RunningThreadStatus.Add(threadFunction.Method.Name, "---");
});
MessageServices.Current.Publish(SEND_THREADS_STATUS, null, RunningThreadStatus);
}
public static void Stop()
{
// Stop each thread
lock (RunningThreadsList)
RunningThreadsList.ForEach(thread =>
{
thread.Abort();
});
// Remove threads from running status
lock (RunningThreadsList)
RunningThreadsList.Clear();
lock (RunningThreadStatus)
{
RunningThreadStatus.Clear();
RunningThreadStatus.Add("TryNcConnection", "---");
}
// Close network monitor
MonitorNetworkResources.Abort();
MessageServices.Current.Publish(SEND_THREADS_STATUS, null, RunningThreadStatus);
}
public static void Close()
{
//Abort Nc Read Threads
RunningThreadsList.ForEach(thread =>
{
thread.Abort();
});
//Abort Connect Thread
ThreadsFunctions.AbortNcConnection();
}
}
}