BOOL m_WorkFlag;//为真时01号正在通信包括发和接收,为假时01号结束
当01号要通信时,先判断这个标志是否为真,如果是真,说明还没结束,就等下一次通信周期再试
当02号要发送时,先判断这个标志是否为真,如果是真,就停止发送并记下状态,等判断01号结束时再发送(可以用定时器来查询)
当01号结束通信时就设标志位为假,结束通信.因为通信非常快,因此出现冲容机会非常少,而且不会出现长时间等待
当01号要通信时,先判断这个标志是否为真,如果是真,说明还没结束,就等下一次通信周期再试
当02号要发送时,先判断这个标志是否为真,如果是真,就停止发送并记下状态,等判断01号结束时再发送(可以用定时器来查询)
当01号结束通信时就设标志位为假,结束通信.因为通信非常快,因此出现冲容机会非常少,而且不会出现长时间等待
一般来说WM_TIMER的优先级最小. 如果同时有WM_KEYDOWN和WM_TIMER消息, 那么WM_KEYDOWN消息会被先处理.所以在你的应用上看, 是不会产生冲突的.但如果是其它地方, 那就需要加锁, 比如在不同的线程或者不同的进程中. 因为端口操作必须是独占的, 所以就需要加上锁, 比如mutex互斥锁.
实际使用情况是这样的,每2秒发一个读取寄存器的命令。
客户会随机设定一下某个参数值,然后发过去。设定参数值的时候,程序有一个变量记录设定状态开启。
当他按控制面板的+ - 到他想要的数值时,会按确定发送。这个选数的过程不会很长。但是发送写寄存器的命令,modbus的设备也会返回一串数,半工通信,这样返回的数也可能会和下一次预订的发送的读命令冲突啊。所以我想这样设定,当客户开始设定参数的时候,固定2秒发一次的命令,这时候就停止,等客户按完确定的时候,停1秒再开始继续发送2秒一次的读命令。这1秒内可以接收写命令的返回值,判断是否写入成功。10楼给的提示很重要
pc104+的设备