baidu_36020590 2016-09-01 02:56 采纳率: 0%
浏览 701

写一个线程,去定时开关一个插板(不是线程定时开关)

开关分为即时开关和定时开关。即时开关支持即时开,即时关,即时反转。
插座的定时开关支持x秒之后每隔y秒总共执行z次定时器。而一次定时器支持执行两次开关,如9点开,10点关。第二次的开关动作依据第一次开关动作产生,如第一次开关动作是开,第二次开关动作则是关,第一次开关动作是关,第二次是开,第一次是反转,第二次也是反转。
发送数据格式:
typedef struct _cs_onoff{
int64_t carry; //延时时间,应为正数,表示定时器从现在开始carry秒后开始执行第一次
int32_t count; //执行次数,负数为无限次
uint32_t interval; //执行间隔,单位秒
int32_t number; //定时器编号,目前支持0-7共8个定时器。如果是负数,系统会选择第一个没有使用的定时器。
int32_t onoff; //0关,1开,2反转
uint32_t week; //每一位表示一个星期的一天,星期1是(1<<(1-1)),星期4是(1<<(4-1)) ,星期天是(1<<(7-1))
uint32_t onoffnumber; //第几个开关,目前只支持一个,所有设置为0

uint32_t lasttime; //持续时间,单位秒,比如我要1点开,2点关,持续时间是3600
int8_t mark[32]; //备注信息
uint32_t disable; //0设置定时器,必须正确的填充定时器信息,1禁用定时器,不会删除定时器信息,但定时器不会执行,2删除定时器,会删除定时器信息,而且定时器也不会再执行,3为启用定时器,定时器依据以前设置的定时信息执行。
}cs_onoff;
定时开关设置举例:
假设现在是9点,星期1,要设置今天和明天10点开,12点关。
Carry = 3600;
Count = 2;
Week = 0xff;//设置0xC也可以
Interval = 24*3600;
Lasttime = 2*3600;//如只是10点开关,不用12点关,则设置成0
Onoff = 1;

  • 写回答

1条回答 默认 最新

  • devmiao 2017-02-10 15:54
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序
  • ¥15 onvif+openssl,vs2022编译openssl64