Initial check-in
This commit is contained in:
70
Source/Program/Common/Misc/EventManager.cs
Normal file
70
Source/Program/Common/Misc/EventManager.cs
Normal file
@@ -0,0 +1,70 @@
|
||||
/*-------------------------------------------------------------------------
|
||||
// UNCLASSIFIED
|
||||
/*-------------------------------------------------------------------------
|
||||
RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION
|
||||
PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS
|
||||
AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT. DISCLOSURE TO
|
||||
UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO
|
||||
RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS
|
||||
CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS
|
||||
OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON
|
||||
COMPANY.
|
||||
|
||||
THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S.
|
||||
GOVERNMENT.
|
||||
|
||||
UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
|
||||
-------------------------------------------------------------------------*/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace ProgramLib
|
||||
{
|
||||
/// <summary>
|
||||
/// Stores global events that any thread can use to monitor
|
||||
/// </summary>
|
||||
internal partial class EventManager
|
||||
{
|
||||
private EventWaitHandle[] _events = new EventWaitHandle[Enum.GetValues(typeof(Events)).Cast<int>().Max() + 1];
|
||||
|
||||
// specify which event should have to be manually reset
|
||||
List<Events> _manualEventList = new List<Events>
|
||||
{
|
||||
Events.GLOBAL_QUIT,
|
||||
Events.FATAL_FAILURE
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// The private constructor
|
||||
/// </summary>
|
||||
public EventManager()
|
||||
{
|
||||
for (int i = 0; i < _events.Count(); i++)
|
||||
{
|
||||
if (_manualEventList.Contains((Events)i))
|
||||
{
|
||||
_events[i] = new ManualResetEvent(false);
|
||||
}
|
||||
else
|
||||
_events[i] = new AutoResetEvent(false);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Implement Indexer to obtain an event object
|
||||
/// </summary>
|
||||
/// <param name=""></param>
|
||||
/// <returns></returns>
|
||||
public EventWaitHandle this[Events eventId]
|
||||
{
|
||||
get
|
||||
{
|
||||
return _events[(int)eventId];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user