| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1179 人关注过本帖, 1 人收藏
标题:为什么timer长时间后会停止工作?
只看楼主 加入收藏
琅拿度
Rank: 1
等 级:新手上路
帖 子:163
专家分:5
注 册:2016-4-7
结帖率:78.57%
收藏(1)
已结贴  问题点数:12 回复次数:21 
为什么timer长时间后会停止工作?
我这个是用设计快捷键控制foobar音乐播放器的

但是时间一长(比如说半天、一天或两天后,这个时间不确定)timer就不工作了

我是用timer来监控有没有按下快捷键的,如果timer不工作就不知道使用者有没有按快捷键了


之所以能确定是timer导致,是因为我在右下角了一个按键加了一段开启timer的代码,每次我发现快捷键不起左右后,按这个键就能用了,所以就证明了是timer不工作了




Foobar_control.rar (192.02 KB)
搜索更多相关主题的帖子: 快捷键 时间 timer 工作 停止 
2023-07-15 10:59
kangss
Rank: 6Rank: 6
等 级:贵宾
威 望:14
帖 子:231
专家分:494
注 册:2014-6-12
收藏
得分:4 
VFP的timer没见谁反应有BUG

“Thisform.timer_key.Interval=30”在表单初始化时执行一次就行了,无需反复执行;

“Thisform.timer_key.Interval=0”相当于“Thisform.timer_key.Enabled=.F.”。执行 timer 事件过程开始执行“Enabled=.F.”末尾执行“Enabled=.T.”即可;

“Thisform.f_nextlist”个人感觉自定义方法这样用更好“Thisform.f_nextlist()”:可以区分是表单的自定义变量还是自定义方法,还可以传入参数;

timer_key 的事件中执行了 5 个自定义方法,这 5 个里面都有“Do While Enddo”,怀疑里面的代码导致某个 do 死循环,导致 timer_key 就没法执行最后的“Enabled=.T.”,导致你看到的 timer_key 像是“停止”了

[此贴子已经被作者于2023-7-15 17:29编辑过]

2023-07-15 17:28
琅拿度
Rank: 1
等 级:新手上路
帖 子:163
专家分:5
注 册:2016-4-7
收藏
得分:0 
以下是引用kangss在2023-7-15 17:28:38的发言:

VFP的timer没见谁反应有BUG

“Thisform.timer_key.Interval=30”在表单初始化时执行一次就行了,无需反复执行;

“Thisform.timer_key.Interval=0”相当于“Thisform.timer_key.Enabled=.F.”。执行 timer 事件过程开始执行“Enabled=.F.”末尾执行“Enabled=.T.”即可;

“Thisform.f_nextlist”个人感觉自定义方法这样用更好“Thisform.f_nextlist()”:可以区分是表单的自定义变量还是自定义方法,还可以传入参数;

timer_key 的事件中执行了 5 个自定义方法,这 5 个里面都有“Do While Enddo”,怀疑里面的代码导致某个 do 死循环,导致 timer_key 就没法执行最后的“Enabled=.T.”,导致你看到的 timer_key 像是“停止”了


图片附件: 游客没有浏览图片的权限,请 登录注册



感谢你的意见:
VFP我已经感受过很多次bug,不可理喻的bug
如:
https://bbs.bccn.net/thread-510561-1-1.html
https://bbs.bccn.net/thread-506195-1-1.html



1、我其它的软件也很多使用timer,唯独这个软件会出现timer莫名停止的问题。(我高度怀疑与托盘图标有关系,已经换过自带的控件,也换过myfll控件依然存在这个问题)

2、“timer 事件过程开始执行“Enabled=.F.”末尾执行“Enabled=.T.”即可”   
    这个我基本都是这么做了
3、“Thisform.f_nextlist”
    这个应该没有影响timer的可能性,赞不讨论

4、timer_key 下的5个“Do While Enddo”
   里面的5个循环都是
current_time=Seconds()
Do While Abs(Seconds()-current_time)<0.3
    拖延时间=1
Enddo
这个循环应该不存在死循环的可能;这是其一;其二:假设进入了死循环,我是没办法点击右下角的按钮的,我右下角的按钮加了timer的“Enabled=.T.”,这个是我怀疑timer停止运行了所以加的验证语句,果然在快捷键失效的情况下,只要我一按这个按钮,快捷键就马上正常使用了,充分证明了timer是停止的,如果是有死循环正在执行的话我是没有办法点击这个按钮的。

5、我设计了两个timer的,其实正常情况下一个timer_key是够用的了,之所以加一个timer_activate,是想两个timer轮流激活对方不让彼此停止,事实效果好像是只是延长了timer工作的时长,就是说本来用一个timer本来几个小时就停止了,用两个好像有时能达到一两天。(好像是比较业余的实验)

综合:我现在高度怀疑是因为第一点的问题,就是托盘,就是放托盘就会这样

[此贴子已经被作者于2023-7-16 00:32编辑过]

2023-07-16 00:27
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10558
专家分:42996
注 册:2014-5-20
收藏
得分:4 
试试在timer开头第一句为:
inkey(0.001)
2023-07-16 08:10
sych
Rank: 4
等 级:业余侠客
威 望:7
帖 子:245
专家分:297
注 册:2019-10-11
收藏
得分:4 
你可以在timer代码中加入这已句thisform.caption=tran(seco()),观察是否是timer停止工作了
2023-07-16 21:25
琅拿度
Rank: 1
等 级:新手上路
帖 子:163
专家分:5
注 册:2016-4-7
收藏
得分:0 
以下是引用sych在2023-7-16 21:25:31的发言:

你可以在timer代码中加入这已句thisform.caption=tran(seco()),观察是否是timer停止工作了


确认是停了的
2023-07-16 22:58
琅拿度
Rank: 1
等 级:新手上路
帖 子:163
专家分:5
注 册:2016-4-7
收藏
得分:0 
以下是引用吹水佬在2023-7-16 08:10:10的发言:

试试在timer开头第一句为:
inkey(0.001)


能说说是什么思路吗?
2023-07-16 22:58
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10558
专家分:42996
注 册:2014-5-20
收藏
得分:0 
以下是引用琅拿度在2023-7-16 22:58:50的发言:

能说说是什么思路吗?

有定时器不定时的说法,精度、优先级、可靠稳定性都低,繁忙时甚至会被丢弃。
inkey()会产生一个中断,给定时器喘口气定定神。
2023-07-16 23:48
sych
Rank: 4
等 级:业余侠客
威 望:7
帖 子:245
专家分:297
注 册:2019-10-11
收藏
得分:0 
回复 6楼 琅拿度
看你的发帖时间,你应该没有测试
2023-07-17 15:20
琅拿度
Rank: 1
等 级:新手上路
帖 子:163
专家分:5
注 册:2016-4-7
收藏
得分:0 
以下是引用sych在2023-7-17 15:20:28的发言:

看你的发帖时间,你应该没有测试


我3楼里的描述,已经可以证实timer是停止了的,因为我用一个按钮开启timer后,一切就正常了

2023-07-17 19:22
快速回复:为什么timer长时间后会停止工作?
数据加载中...
 
   



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

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