| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2336 人关注过本帖
标题:这段程序运行中经常造成系统无响应,大侠们看看,问题出在哪里啊
只看楼主 加入收藏
Pgwyg
Rank: 2
等 级:论坛游民
帖 子:28
专家分:20
注 册:2022-6-10
结帖率:100%
收藏
 问题点数:0 回复次数:25 
这段程序运行中经常造成系统无响应,大侠们看看,问题出在哪里啊
1,经常在19:00:00点停止写数据
2,经常在23:59:59引起程序无响应,此时必须用程序管理器终止程序
3,不定时发生,发生的时间一定是上面的时间
4,使用TRY没有捕捉到任何错误信息
星号下是程序,烦请各位大侠看看,谢了!


*
当前时间=DATETIME()
*显示时间
IF thisform.timexs.Caption!=TTOC(当前时间)
    *更新时间显示
    thisform.timexs.Caption=TTOC(当前时间)
    *整点(每60分钟)保存一次水表数据
    IF MINUTE(当前时间)=0 AND sec(当前时间)=0 &&
        累计供水=THISFORM.TEXT10.Value
        当日用水=THISFORM.TEXT11.VALUE
        累计回水=THISFORM.TEXT12.Value
        当日回水=THISFORM.TEXT13.Value
        INSERT INTO DATA\COUNT_DATA (编号,采集,累计,当日) VALUES (yh_gsbh,当前时间,ALLTRIM(STR(累计供水,20,5)),ALLTRIM(STR(当日供水,20,5)))
        INSERT INTO DATA\COUNT_DATA (编号,采集,累计,当日) VALUES (yh_hsbh,当前时间,ALLTRIM(STR(累计回水,20,5)),ALLTRIM(STR(当日回水,20,5)))
        thisform.label25.CAPTION=TTOC(当前时间)+" 供水和回水流量计(水表) 的数据已经保存! "   
    ENDIF
    *每天23时为水表日结算时刻,数据初始化
    IF HOUR(当前时间)=23&& AND MINUTE(当前时间)=59 AND SEC(当前时间)=59   
        上报状态=.F.
        昨日供水=累计供水
        当日供水=0
        昨日回水=累计回水
        当日回水=0
        THISFORM.TEXT10.Value=累计供水
        THISFORM.TEXT11.VALUE=当日供水
        THISFORM.TEXT12.Value=累计回水
        THISFORM.TEXT13.Value=当日回水   
    ENDIF
    *每日4时自动推送数据,如果不成功,在此时间内相隔10分钟再次推送
    IF HOUR(当前时间)=4 AND MOD(MINUTE(当前时间),10)=0
        IF 上报状态=.F.
            THISFORM.上报()
        ENDIF
    ENDIF
    *每天早上6时开始采集水表数据,0 时结束
    IF HOUR(当前时间)>=6 AND HOUR(当前时间)<>0    &&AND MINUTE(当前时间)=0 AND SEC(当前时间)=0
        *读表状态=.t.
    ELSE
        *读表状态=.f.   
    ENDIF
ENDIF
搜索更多相关主题的帖子: Value thisform 当前 时间 AND 
2022-06-12 09:18
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:66
帖 子:1093
专家分:2690
注 册:2015-12-30
收藏
得分:0 
这段程序是timer里的吗?如果是的话,间隔是多少?

*每天23时为水表日结算时刻,数据初始化
IF HOUR(当前时间)=23&& AND MINUTE(当前时间)=59 AND SEC(当前时间)=59   
if语句中的“&&”把后面的判断给注释掉了,应该是从23:00:00开始到23:59:59之间都执行这段代码
而且,这里更改了上报状态:上报状态=.F.,但是没有地方改成.T.
猜想“上报状态”是个变量(不是字段),在thisform.上报()里更改为.T.了

没看出明显的问题来,如果问题发生在23:59:59之后,可以检查一下那两条Insert语句是否正常工作了
建议:程序中有4个条件判断,之间没有关联关系,可以使用case分支处理
2022-06-12 09:57
Pgwyg
Rank: 2
等 级:论坛游民
帖 子:28
专家分:20
注 册:2022-6-10
收藏
得分:0 
timer的时间间隔是1000毫秒,insert正常,TRY未能捕捉错误
2022-06-12 10:05
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10608
专家分:43190
注 册:2014-5-20
收藏
得分:0 
1、定时器(Timer)不“定时”,计时精度有可能不能达到要求,造成不能准时执行任务。
2、“程序无响应”未必是定时器本身的问题,可以在定时器事件中只用一句 INKEY(0.001) 测试。

2022-06-12 10:58
Pgwyg
Rank: 2
等 级:论坛游民
帖 子:28
专家分:20
注 册:2022-6-10
收藏
得分:0 
读水表远程上报程序,有时运行几天没问题,有时一天就没响应,但是时间就是19点和23点这两个时间段,其他时间没问题,不写数据库也会出现问题。
2022-06-12 11:23
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:66
帖 子:1093
专家分:2690
注 册:2015-12-30
收藏
得分:0 
把timer的间隔改成800试试
2022-06-12 11:46
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:66
帖 子:1093
专家分:2690
注 册:2015-12-30
收藏
得分:0 
不好找的问题可以考虑在本地建立日志(一个DBF),每个关键点或动作都记录一条,看看在哪里就停止了
2022-06-12 11:47
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10608
专家分:43190
注 册:2014-5-20
收藏
得分:0 
这样试试:
** Timer 事件
this.Enabled = .F.
INKEY(0.001)
...... 事务过程
this.Enabled = .T.
2022-06-12 11:54
Pgwyg
Rank: 2
等 级:论坛游民
帖 子:28
专家分:20
注 册:2022-6-10
收藏
得分:0 
试过了,不灵
2022-06-12 12:11
Pgwyg
Rank: 2
等 级:论坛游民
帖 子:28
专家分:20
注 册:2022-6-10
收藏
得分:0 
关键是两个时间点让人费解
2022-06-12 12:12
快速回复:这段程序运行中经常造成系统无响应,大侠们看看,问题出在哪里啊
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.060045 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved