找回密码
 加入
搜索
查看: 4768|回复: 7

[系统综合] sleep和进程的问题~在线等

  [复制链接]
发表于 2014-3-10 19:12:40 | 显示全部楼层 |阅读模式
最近在写一个小东西~~
用于串口命令发送接受的, 现在有一个问题, 主程式里While Wend里面是一个获取串口数据的命令,也就是一直监视串口回传信息,用以保存,如果只是发送单个命令是没有问题,指定端口,发送接收就好,但是我想发送的时候增加一个Delay,也就是说发送第一个串口命令,然后Delay1秒后再发送另一个,在Delay的这段时间里如果使用Sleep的话就无法接受回传信息,有试过_CoProc那个,但是那个调用的进程是无法使用#include的,所以另一个进程无法获取回传信息,现在肯定的是要用一个双进程,但是不知道怎么用~TimerDiff 这个也尝试过,但是不怎么会用,@AutoItExe也尝试过,不过好像没法获取回传信息,哪位大大能指导下,写的程式有1000多行,贴出来太大了,哪位大大指导下思路,我挨个试验~  在搜索里没有搜索到相关的~
发表于 2014-3-10 20:52:09 | 显示全部楼层
回复 1# snailyyy

可以考虑用AdlibRegister 函数进行“DELAY”。

双进程,不要求要速度的,可以通过写文件、注册表等进行数据交换。
发表于 2014-3-10 21:55:15 | 显示全部楼层
Local $timer = TimerInit()

While 1
       
        ;receive message from the Com port
       
        If TimerDiff($timer) > 1000 Then
                ;Send message through Com. port
                $timer = TimerInit()
        EndIf       
       
wend
发表于 2014-3-10 22:02:07 | 显示全部楼层
2楼的回答正确。sleep会使主进程一并进入休眠状态,所以可以改变思路采用时钟的方式来实现。或者可以将多线程改为多进程,使用外部文件进行通讯。
 楼主| 发表于 2014-3-11 20:21:31 | 显示全部楼层
回复 2# user3000


    非常感谢~   今天有试过AdlibRegister(“”,1)去获取串口回传信息,如果单独去发送串口信息还好,能够发送也能获取回传,但有时会用到连续发送串口信息,比如发送完一个后Sleep(100)后再发送一遍上一信息或者下一信息,使用Sleep的时候不知道AdlibRegister是会挂起还是怎样,无法正常运行,只有发送完所有消息后才能获得最后一个发送信息的回传信息,很是纠结~  如果像三楼那样用While的话估计也会出这个问题,但是还没有试,明天会试一下~~~
是否还有其他方法可以解决~~
 楼主| 发表于 2014-3-11 20:22:36 | 显示全部楼层
回复 4# skyfree


    外部文件通信是? 刚接触没多久,研究不深,请指教~~~~
发表于 2014-3-11 22:10:00 | 显示全部楼层
回复 6# snailyyy


    主进程监听某个位置的某个文件的变化,子进程将要通信的内容写进这个文件,由主进程读取,就形成了子进程与主进程的通信。反之亦然。
 楼主| 发表于 2014-3-12 22:48:32 | 显示全部楼层
回复 7# skyfree


    了解了  我再尝试下~~~~  非常感谢~~
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-23 23:34 , Processed in 0.088456 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表