snailyyy 发表于 2014-3-10 19:12:40

sleep和进程的问题~在线等

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

user3000 发表于 2014-3-10 20:52:09

回复 1# snailyyy

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

双进程,不要求要速度的,可以通过写文件、注册表等进行数据交换。

xms77 发表于 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

skyfree 发表于 2014-3-10 22:02:07

2楼的回答正确。sleep会使主进程一并进入休眠状态,所以可以改变思路采用时钟的方式来实现。或者可以将多线程改为多进程,使用外部文件进行通讯。

snailyyy 发表于 2014-3-11 20:21:31

回复 2# user3000


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

snailyyy 发表于 2014-3-11 20:22:36

回复 4# skyfree


    外部文件通信是? 刚接触没多久,研究不深,请指教~~~~

skyfree 发表于 2014-3-11 22:10:00

回复 6# snailyyy


    主进程监听某个位置的某个文件的变化,子进程将要通信的内容写进这个文件,由主进程读取,就形成了子进程与主进程的通信。反之亦然。

snailyyy 发表于 2014-3-12 22:48:32

回复 7# skyfree


    了解了我再尝试下~~~~非常感谢~~
页: [1]
查看完整版本: sleep和进程的问题~在线等