跟踪状态参数是什么
Keeping track what the state parameters are
我正在重构我的前任创建的软件。该软件可以通过 CAN 总线进行通信。目前所有设备都硬编码在软件中,我的工作是让每个设备类型都可配置。 (保存在序列化 类 中并可使用模型创建器创建)。
使用该软件,可以对设备进行配置、寻址和参数设置。
目前,它使用在 uint paramsRequested 和 paramsUpdated 中设置的标记枚举来跟踪消息。但这需要用其他东西代替。因为这是不可扩展和可配置的。
枚举示例:
public enum FunctionParameters : uint
{
None = 0,
StatusInterval = 1 << 0,
Delay = 1 << 1,
Time = 1 << 2,
.....
}
一条消息通过 can-bus 发送,正在异步等待回复。
收到消息时:
_paramsUpdated |= (uint) FunctionParameters.StatusInterval;
另一个线程等待消息到达,使用它并检查是否收到参数。
while (((uint)_paramsUpdated & (uint)param) == 0)
{
// Do nothing
Thread.Sleep(threadSleepTimeMS);
//Thread.Yield();
}
当这个时间过长时,会报超时异常。目前这可以正常工作。
问题是,是否有不使用枚举标志来跟踪这一点的替代方案,因为新情况有多个灵活的标志。
我没有超时问题,用另一个系统替换枚举标志更像是一个架构问题。
也许我自己有解决方案:
我添加了一个名为class的ParameterFlag;这看起来链接如下:
public class ParameterFlag
{
public ParameterFlag(ParameterType parameterType, bool flag)
{
ParameterType = parameterType;
Flag = flag;
}
public ParameterType ParameterType
{
get;
set;
}
public bool Flag
{
get;
set;
}
}
_paramsUpdated 将变为:
List<ParameterFlag> _paramsUpdated
收到消息时:
ParameterFlag flag =_paramsUpdated.Find(x=> x.ParameterType == ParameterType);
flag.Flag = true;
另一个线程等待消息到达,使用它并检查是否收到参数:
private void WaitParameterReceived(ParameterType param)
{
while (!_paramsUpdated.Find(x => x.ParameterType == param).Flag)
{
// Do nothing
Thread.Sleep(threadSleepTimeMS);
//Thread.Yield();
}
}
非常感谢您的宝贵意见!
我正在重构我的前任创建的软件。该软件可以通过 CAN 总线进行通信。目前所有设备都硬编码在软件中,我的工作是让每个设备类型都可配置。 (保存在序列化 类 中并可使用模型创建器创建)。 使用该软件,可以对设备进行配置、寻址和参数设置。
目前,它使用在 uint paramsRequested 和 paramsUpdated 中设置的标记枚举来跟踪消息。但这需要用其他东西代替。因为这是不可扩展和可配置的。
枚举示例:
public enum FunctionParameters : uint
{
None = 0,
StatusInterval = 1 << 0,
Delay = 1 << 1,
Time = 1 << 2,
.....
}
一条消息通过 can-bus 发送,正在异步等待回复。
收到消息时:
_paramsUpdated |= (uint) FunctionParameters.StatusInterval;
另一个线程等待消息到达,使用它并检查是否收到参数。
while (((uint)_paramsUpdated & (uint)param) == 0)
{
// Do nothing
Thread.Sleep(threadSleepTimeMS);
//Thread.Yield();
}
当这个时间过长时,会报超时异常。目前这可以正常工作。
问题是,是否有不使用枚举标志来跟踪这一点的替代方案,因为新情况有多个灵活的标志。
我没有超时问题,用另一个系统替换枚举标志更像是一个架构问题。
也许我自己有解决方案:
我添加了一个名为class的ParameterFlag;这看起来链接如下:
public class ParameterFlag
{
public ParameterFlag(ParameterType parameterType, bool flag)
{
ParameterType = parameterType;
Flag = flag;
}
public ParameterType ParameterType
{
get;
set;
}
public bool Flag
{
get;
set;
}
}
_paramsUpdated 将变为:
List<ParameterFlag> _paramsUpdated
收到消息时:
ParameterFlag flag =_paramsUpdated.Find(x=> x.ParameterType == ParameterType);
flag.Flag = true;
另一个线程等待消息到达,使用它并检查是否收到参数:
private void WaitParameterReceived(ParameterType param)
{
while (!_paramsUpdated.Find(x => x.ParameterType == param).Flag)
{
// Do nothing
Thread.Sleep(threadSleepTimeMS);
//Thread.Yield();
}
}
非常感谢您的宝贵意见!