Я рефакторинг программного обеспечения, созданного моим предшественником. Программное обеспечение может связываться через шину. В настоящий момент все устройства жестко закодированы в программном обеспечении, и моя задача - настроить каждый тип устройства. (Сохраняется в сериализованных классах и создается с помощью создателя модели). С программным обеспечением устройства могут быть настроены, адресованы и установлены параметры.Отслеживание параметров состояния
В настоящий момент он отслеживает сообщения с отмеченными перечислениями, заданными в параметрах uint paramsRequested и paramsUpdated. Но это нужно заменить чем-то другим. Потому что это не масштабируемо и не настраивается.
Пример перечисление:
public enum FunctionParameters : uint
{
None = 0,
StatusInterval = 1 << 0,
Delay = 1 << 1,
Time = 1 << 2,
.....
}
электронного письмо передается по шине CAN-Bus и ждет asynchronosly на ответ.
Когда приходит сообщение:
_paramsUpdated |= (uint) FunctionParameters.StatusInterval;
Другой поток ждет, пока сообщение прибыл, чтобы использовать его и проверяет параметр isreceived.
while (((uint)_paramsUpdated & (uint)param) == 0)
{
// Do nothing
Thread.Sleep(threadSleepTimeMS);
//Thread.Yield();
}
Если это занимает слишком много времени, это приведет к исключению таймаута. Это работает в настоящий момент.
Вопрос в том, существуют ли альтернативы, которые не работают с флагами enum, чтобы отслеживать это, потому что новая ситуация имеет несколько гибких флагов.
У меня нет проблем с тайм-аутом, это скорее архитектурная проблема, чтобы заменить флаги переполнения другой системой.
Ваш вопрос не очень ясен. Почему это занимает слишком много времени? Почему бы вам просто не увеличить количество потоков потребителя \ производителя? –
@ Kilanny Добавил несколько комментариев, чтобы сделать вопрос более понятным. – Gulpener
Как насчет семафоров? –