-
Notifications
You must be signed in to change notification settings - Fork 1
Реализация таймера
Для реализации таймера необходимо реализовать следующий интерфейс: https://github.com/dodev/RoadDataCollector/blob/master/Main/Timers/ITimer.cs
namespace Timers
{
/// <summary>
/// Таймер включает EventWaitHandle в состояние Signaled на определеном интервале
/// времени или растоянии. На этом событии ждут потоки снятия данных из устройств.
/// </summary>
public interface ITimer
{
void Init (EventWaitHandle eventHandle);
void Start ();
void Stop ();
}
}
В нашем проекте необходимо предусмотреть два таймера (временной таймер и таймер расстояние), из которых один уже реализован - это временной таймер. Задача таймеров - запустить снятие информации с устройства при возникновении определенного события, например, истечения двух секунд или прохождения 10 метров дороги. Сигнализация происходит с помощью стандартного способа синхронизации потоков: события. В данном проекте используется встроенный интерфейс в Net.ManualResetEvent. Он передается таймеру через метод void Init (EventWaitHandle eventHandle). При вызове метода void Start (), это событие должно начать запускаться при определенных обстоятельствах (истечения какого то периода времени или прохождения определенного расстояния). А при вызове метода void Stop() - событие больше не будет запускаться
Таймер расстояния требует наличие устройства, которое будет давать информацию о пройденном расстоянии, например GPSDevice, которое будет снимать информацию и возвращать разницу в метрах от предыдущего снятия. Если эта разница больше либо равна некоторому заданному интервалу времени, то таймер запускает сигнал. Такое функциональное устройство необходимо реализовать как интерфейс, чтобы обеспечить возможность использования разных устройств для определения пройденного расстояния. Примерный класс соержится в последней версии диаграммы классов.