110,533
社区成员
发帖
与我相关
我的任务
分享
var timer=new timer(1000*5);
timer.exap+=(a,b)=>{
device.foreach(item=>{
item.value.beginsend("你的查询命令");
});
};
timer.start();
说白了 不就是一个定时器 对所有的在线设备 进行下行数据吗? 有:"线程" 的说法吗? 显然没有.
当然timer本身就是多线程的 这个我们不需要关心.
这个时候 上面的代码 是"只管发 不管收" 也就是 我不在乎你给我应答什么 我只管告诉你 我给你什么就行了.
这个时候 在你的data_rec事件中 可能就会收到来自不同"设备"上行的查询应答数据
你可以根据不同设备 来发送给不同的人(参考我第一次的回答) 这个完全没问题 是吧.
然后你又说 这个时候 你需要"控制"设备并且得到"设备"的应答值.你说要"停止timer". 那我的问题就是. 为什么要停止呢?
因为你这个发 跟服务器的发 虽然都叫发 但是其实根本没任何关系.. 因为你的data_rec本质是异步的啊..
所以根本不需要什么线程停止恢复的....什么sleep的 根本不存在...
AutoSend()
{
发送状态命令
等待获取状态信息
thread.sleep(5000)
转发到web
}
if(服务端接收到来自web的控制命令)
{
停止AutoSend线程
发送web控制命令----------->设备可以收到此命令
等待获取返回信息-------------->问题就在这里,这里接收不到任何信息,用调试助手确实可以看到返回了信息,但是服务端接收不到,
if(返回信息)
{
转发到web
AutoSend() 再次启动自动任务
}
}