要求:程序要求运行1000次(可设),而每一次要经过四个步聚如下:
1:要通过串口发送数据到相关的硬件,使硬件运行一段时间T1;
2:再通过串口发送数据使硬件停止运行;
3:之后发送指令读取硬件的数据,并将数据显示到相应的界面上;
4.最后再等待一段时间T2。(目的是使硬件完全停止)遇到的问题:
1.用for语句循环每一次操作,数据并没有在每次(四个步聚)结束时,将数据显示到相应的界面,而是等待循环结束一次显示出来;
2.软件会停滞的现象,点其它功能时反应不过来,延时我用 sleep() 处理 请问各位有没有什么好的办法,让程序每接收一个数据就显示出来,并不会出现停滞现象,而且我可以在运行(1000次)中随意中止。

解决方案 »

  1.   

    1、需要插入application.processmessages;
    2、把sleep(1000)改为循环sleep(100);application.processmessages;10次
      

  2.   

    具体的做法就是,
    定义一个TDateTime
    再用现在系统的时候加上你要等的秒数,合成一个新的TDateTime用一个定时器,每一秒判断一次现在系统的时间与这个新合成的时间,如果现在的系统时间大于等于合成的时间就可以执行了,相应状态下的动作
      

  3.   

    这是一种。
    另外可以考虑用定时器,然后设置一个定时器状态标志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个,大意就是有定时间隔的把定时间隔重置,达到按间隔发送消息的目的。而间隔是变量,可以由外部设置的。停止定时器就是停止循环没有每个循环都显示,那应该是显示操作没放循环里,而是循环结束显示出来。
    如果可以的话楼主可以把代码贴出来看看
      

  4.   

    sz_haitao的方法正确,你在需要显示数据或者发送数据完成以后,都调用一次application.processmessages