延时的处理

qlonsh 2010-01-05 12:05:03
要求:程序要求运行1000次(可设),而每一次要经过四个步聚如下:
1:要通过串口发送数据到相关的硬件,使硬件运行一段时间T1;
2:再通过串口发送数据使硬件停止运行;
3:之后发送指令读取硬件的数据,并将数据显示到相应的界面上;
4.最后再等待一段时间T2。(目的是使硬件完全停止)

遇到的问题:
1.用for语句循环每一次操作,数据并没有在每次(四个步聚)结束时,将数据显示到相应的界面,而是等待循环结束一次显示出来;
2.软件会停滞的现象,点其它功能时反应不过来,延时我用 sleep() 处理

请问各位有没有什么好的办法,让程序每接收一个数据就显示出来,并不会出现停滞现象,而且我可以在运行(1000次)中随意中止。
...全文
96 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
hill_qd 2010-01-10
  • 打赏
  • 举报
回复
sz_haitao的方法正确,你在需要显示数据或者发送数据完成以后,都调用一次application.processmessages
wintergoes 2010-01-05
  • 打赏
  • 举报
回复
多线程
wliaoc 2010-01-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wintergoes 的回复:]
多线程
[/Quote]
这是一种。
另外可以考虑用定时器,然后设置一个定时器状态标志flag,flag=0,1,2,3;循环变量add =0;
=0时 :add:=add+1,通过串口发送数据到相关的硬件,使硬件运行一段时间T1,T1就是重新设置定时器的间隔,flag=1;
=1时 :通过串口发送数据使硬件停止运行,flag=2;
=2时 :发送指令读取硬件的数据,并将数据显示到相应的界面上,flag=3;
=3时 :最后再等待一段时间T2,T2就是重新设置定时器的间隔,flag=0;

不知道楼主第二步跟第三步、第四步之间有没有间隔,没有的话标志只要2个,大意就是有定时间隔的把定时间隔重置,达到按间隔发送消息的目的。而间隔是变量,可以由外部设置的。停止定时器就是停止循环

没有每个循环都显示,那应该是显示操作没放循环里,而是循环结束显示出来。
如果可以的话楼主可以把代码贴出来看看
wintergoes 2010-01-05
  • 打赏
  • 举报
回复
如果你很着急处理你的问题可以用二楼的方法
但是多线程是你提高能力必经的一步
有时间还是学一学比较好
wanglipo 2010-01-05
  • 打赏
  • 举报
回复
lcmlhs_2005 2010-01-05
  • 打赏
  • 举报
回复
帮你顶一下,学习中~~~~
notebook800 2010-01-05
  • 打赏
  • 举报
回复
加一个线程
qkhhxkj102 2010-01-05
  • 打赏
  • 举报
回复
具体的做法就是,
定义一个TDateTime
再用现在系统的时候加上你要等的秒数,合成一个新的TDateTime

用一个定时器,每一秒判断一次现在系统的时间与这个新合成的时间,如果现在的系统时间大于等于合成的时间就可以执行了,相应状态下的动作
qkhhxkj102 2010-01-05
  • 打赏
  • 举报
回复
之前我做了一个关了定时录像拍照的程序,
程序起来后也是先发短信让设备起来,程序就在等设备上线,
上线后,再向设备发送跳预置位命令,程序再等到设备跳到预置位,
。。。

我的做法没有用楼上同学所说的线程,当然我没有说他的有错,
我这里只是说我也有一种办法

就是用定时器等,
因为你的时间都是知道的
所以在不同的时候给程序赋不同的状态,在不同的状态等不同的时间,
大概就是这样

haochin 2010-01-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sz_haitao 的回复:]
1、需要插入application.processmessages;
2、把sleep(1000)改为循环sleep(100);application.processmessages;10次
[/Quote]
这个不错。
wooden954 2010-01-05
  • 打赏
  • 举报
回复
虽然楼上方法正确,但你的要求不是很复杂,因此用2楼的办法我认为更简单一点儿,否则还得考虑同步问题。
idecl 2010-01-05
  • 打赏
  • 举报
回复
楼上两个方法都是正解
haitao 2010-01-05
  • 打赏
  • 举报
回复
1、需要插入application.processmessages;
2、把sleep(1000)改为循环sleep(100);application.processmessages;10次

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧