VB Timer控件运行一段时候自动停止

gitbyte 2009-11-06 02:56:20
VB Timer控件运行一段时候自动停止
'//测试过了很郁闷- -。本机调试没问题。放到其他机子就出问题了。刚开始以为是加壳之后或者vmp之后才出问题
后来发现- -不加壳。也一样停。输出p代码测试了还是停了。用本地代码也一样。

是同时开了好几个程序测试的。有几个停的快。几个停的慢。。在timer事件的开头都加了显示信息。
也就是说timer事件停了。。很郁闷。重新true也不行。。

本机运行很长时间都没问题。。里边代码都一般。其中有这样的
Interval属性让他随机变

text4.text=2 '//这些都没问题的
'//Randomize
'//Timer_ZDsell.Interval = Val(Text4.Text) * 1500 '//+ Int(Rnd() * 1000 + 500)

不知道是不是经常换Interval引起的。- -碰到的朋友看看。无语了。探讨一下。
...全文
2154 29 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
gitbyte 2009-12-19
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 zdhysd1 的回复:]
cpu%50左右应该是有死循环了,双核的一个线程死循环差不多就会占掉一个cpu。
[/Quote]
首先感谢楼上的!zdhysd1
汗- -。楼山的一句点破。。。。。以前只在网速慢的时候注意到connet不上。状态连接。所以一直doevent。而且也没有处理。后来在别的程序上加了处理了。这个程序没处理- -。我知道哪里错了。
感谢= =楼上的。。。否则我都不知道为什么会50%-100%
zdhysd1 2009-12-17
  • 打赏
  • 举报
回复
cpu%50左右应该是有死循环了,双核的一个线程死循环差不多就会占掉一个cpu。
gitbyte 2009-12-17
  • 打赏
  • 举报
回复
'//Timer_ZDsell.Interval = Val(Text4.Text) * 1500 '//+ Int(Rnd() * 1000 + 500)

- -不会。不过这只是我自己随便抽出来的一段。
text4是不可能为空。因为执行前先判断。为空。非数字说白了就是输入间隔时间。只不过给人看看
后边的'//+ Int(Rnd() * 1000 + 500) 这是+上去的。后边这个最少也等于500毫秒= =
cbm666 把我和谐了吧- -我的错。没给出原生态代码。。探讨一下。呵呵
cbm6666 2009-12-17
  • 打赏
  • 举报
回复
呵呵....睡觉前回你 也相信你不会犯这低级错误

但是请看看你1F的代码

你1F 的代码 (别地方我看不到) 难道不会有等於 0 的时侯 ?

无语了。探讨一下
gitbyte 2009-12-17
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 cbm666 的回复:]
随机数 你这样写 当它为 0 时 Interval=0 Timer1就再也没机会了,因为等於零 相当於 Timer1.Enabled=False

要改为 Timer_ZDsell.Interval =  Int(Rnd * 1500) + 1  保证大於 0

[/Quote]
- -。这种低级错误。对于初学者来说可能会犯。rnd的范围大家都知道是>=0 <1 我肯定是加了放心。

msgbox 没有弹出。中途无任何错误。而且我一般不会用msgbox。直接用api messagebox
msgbox会暂停。

因为整个程序已经做好了。如果变动的话。超级多。单个timer来控制 好多。看的会头晕
我也是根据sunxinyu 一样想的。另外一个timer。隔断时间来执行以下command1的click事件
然后再click一下。。
现在也只能这样。没出过问题了。调试了一段时间。- -我怀疑是不是它cpu山寨版的。还是编译器问题。
感谢各位。先这样。
赵4老师 2009-12-08
  • 打赏
  • 举报
回复
换个思路试试:
别用多个Timer,改用一个Timer和一个全局标志变量,根据这个标志在新的Timer处理中轮流运行原来各Timer处理中的任务。
cbm6666 2009-12-07
  • 打赏
  • 举报
回复
随机数 你这样写 当它为 0 时 Interval=0 Timer1就再也没机会了,因为等於零 相当於 Timer1.Enabled=False

要改为 Timer_ZDsell.Interval = Int(Rnd * 1500) + 1 保证大於 0
zdingyun 2009-12-07
  • 打赏
  • 举报
回复
如果LZ在Timer事件中有Msgbox语句将会干扰Timer计时器的正常运行.
sunxinyu 2009-12-07
  • 打赏
  • 举报
回复
mark一下。能不能再开个timer,用这个定时器专门轮流定期的关闭、打开其他工作的timer。
gitbyte 2009-11-28
  • 打赏
  • 举报
回复
HOHO。。。那个什么。= = 问题还没解决。我都改了timer里边的代码。精简了。就10句。
没有什么判断。这小效率很高。不过还是停止。可以肯定timer直接停了。。我晕死。
我是用timer来模拟sock发送。用text的Change事件来处理返回的信息。然后再发送。
本机3.5gb内存。双核 e1400 2gbcpu。sp3。ghostxp 电脑城装机版。调试运行。开个6.7个都没问题。

换了他的机子就这样。它的系统也重新装过。换个不同的系统。。上边我也说了。有一个卡主。cpu就50%。
还正常运行着。

有一个很怪的现象。timer是挂了(停了就正常- -就是true就挂掉。不动)。如果这时你通过其他按钮。有一个手动刷列表的。它是手动来发sock模拟信息。点一下那个按钮。过一会儿。timer就又开始工作。工作一段时间就又挂了。
现在只能用另外一个timer来执行commandbox 的click事件。。
嗷嗷叫的老马 2009-11-10
  • 打赏
  • 举报
回复
.............建议你如果解决了此问题,把结果发上来,搞清楚原因.

我们这里无法构建与你那里相同的环境,问题也没有办法重现,能提供给你的只能是一些猜测与建议.
gitbyte 2009-11-09
  • 打赏
  • 举报
回复
没辙了- -消息。。。不现实。。而且timer可没有什么消息可以截取。无语了。。其他的设置了都是没用的
发现个问题。如果这个程序停了。cpu它基本会暂用45%-50左右。
嗷嗷叫的老马 2009-11-07
  • 打赏
  • 举报
回复
用SPY++看看窗体的消息吧.
嗷嗷叫的老马 2009-11-07
  • 打赏
  • 举报
回复
WINDOWS的消息队列最大消息数量为10000好象,如果产生消息的速度比处理消息的速度快,多余的消息就会被丢弃.....

而你的程序还要"开了大约6-7个",说明要处理的数据确实挺多

如果正好流程中需要利用TIMER事件进行连接,并且正好丢弃了这个消息,就不会产生相应定时器的TIMER事件,于是你的流程也就中断在那里了..........

以上是一种可能性,具体是啥情况你得自己研究.
gitbyte 2009-11-07
  • 打赏
  • 举报
回复
- -在本机调试过了。开了7。8个。运行n久。都没问题。。。现在只能让那边换个操作系统了。开3个也不行cpu40%左右也不可以。还有会一个挂掉。慢慢第二。依次。
gitbyte 2009-11-07
  • 打赏
  • 举报
回复

gitbyte 2009-11-07
  • 打赏
  • 举报
回复
有一个想象就是他的CPU。开了3个没事。才20%都不到。开多个。直接就是100%。
而我的机子开了5个。走动的话。最高才40%。最小化。走动5%-20%之间……。
gitbyte 2009-11-07
  • 打赏
  • 举报
回复
- -可怜的娃。惨呢。我这xp sp3好像没啥问题。那个机子是sp2
开了6-7个cpu就100了。
6-7个不是timer。是程序- -。同一个主程序.exe 打开了6.7个。 最后可能就1个在。再过一会儿就一个都挂了。
在timer事件里边有放着doevents和sleep 的过程。用来暂停的。好像也不是这个问题。昨天就都去掉了。也一样。真郁闷。真痛苦- -。去年一个程序也是这样。其他都好好地就做这种发包的就会这样。以前的不加壳就没事。加了壳就出问题了。真不好搞。火大。。 - -、。
贝隆 2009-11-06
  • 打赏
  • 举报
回复
飘过
gitbyte 2009-11-06
  • 打赏
  • 举报
回复
- -测出来了。、。开了大概6-7个。。已经挂了。挂了的
测试出来了。
MsgBox Timer_ZDsell.Interval
MsgBox Timer_ZDsell.Enabled

时间有的2000
Enabled也有。true。。。就是不动。- -
加载更多回复(9)

1,453

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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