循环判断死机问题请教

lijuan1215_2009 2009-11-05 06:17:57
Function sendFlag_judge(sendf As String) As String '发送状态判断
Dim SF As Integer
While SF < 2
SF = sendf
Wend
MsgBox "信息发送成功!", vbExclamation, "恭喜"
End Function

这段代码判断一个标志位的变化,如果等于2了就结束。
为什么我一调用,程序就会卡呢?
...全文
166 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzhgb 2009-11-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 veron_04 的回复:]
这个过程,在SendF小于2时肯定死机,如果SendF是一个全局变量,能有外部过程修改,那还可能退出循环
[/Quote]
必须外部过程修改,
内部过程必须等你循环结束才会执行
多线程我还不太懂,vb2个线程修改一个变量应该会挂掉
clear_zero 2009-11-06
  • 打赏
  • 举报
回复
自动修改?什么意思,怎么修改的?
我想你的逻辑可能错了
你在sendFlag_judge这个函数里面做循环会死机的

你可以每隔一段时间调用这个函数,传入不同的参数。比如timer


Private Sub Timer1_Timer()
If senf = 2 Then
MsgBox
Timer1.Enabled = False
End If
End Sub

如果符合条件就停止timer
ZOU_SEAFARER 2009-11-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 clear_zero 的回复:]
自动修改?什么意思,怎么修改的?
我想你的逻辑可能错了
你在sendFlag_judge这个函数里面做循环会死机的

你可以每隔一段时间调用这个函数,传入不同的参数。比如timer
VB codePrivateSub Timer1_Timer()If senf=2Then
MsgBox
Timer1.Enabled=FalseEndIfEnd Sub
如果符合条件就停止timer
[/Quote]

要么你在循环中加一个DOEVENTS 看看
要不就上面那样,用时间去判断,可以把周期稍微弄小点,比如100-500左右
luofenghen 2009-11-06
  • 打赏
  • 举报
回复
好像可以的~
luofenghen 2009-11-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 lijuan1215_2009 的回复:]
Function sendFlag_judge(sendf As String) As String  '发送状态判断
Dim SF As Integer
While SF < 2
    SF = sendf
    Wend
    MsgBox "信息发送成功!", vbExclamation, "恭喜"
End Function

这段代码判断一个标志位的变化,如果等于2了就结束。
为什么我一调用,程序就会卡呢?
[/Quote]

先不管怎么样 字符串能赋值给整型吗~~ SF=sendf
lijuan1215_2009 2009-11-06
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zou_seafarer 的回复:]
sendf 是数据库表中的一个值

这个取值的代码没有被运行,那么它不会被变更值。

[/Quote]
这个值是会自动修改的,是另一个程序,这一点没有疑问,因为我可以看到它的变化的。
jhone99 2009-11-06
  • 打赏
  • 举报
回复
用clear_zero的方式解决
ZOU_SEAFARER 2009-11-06
  • 打赏
  • 举报
回复
sendf 是数据库表中的一个值

这个取值的代码没有被运行,那么它不会被变更值。
lijuan1215_2009 2009-11-06
  • 打赏
  • 举报
回复
sendf 是数据库表中的一个值,另外一个程序会改变它。而我的思路就是一直读这个值,直到它等于2了就结束。
ZOU_SEAFARER 2009-11-06
  • 打赏
  • 举报
回复

sendf 是变量的话
因为vb是单线成,当运行到你的循环代码中后,是绝对的控制,不再有机会执行其他的代码了,
所以你没有机会改变标记的数据值,也就代表你死循环了。


booksoon 2009-11-06
  • 打赏
  • 举报
回复
死循环~~~
jhone99 2009-11-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 clear_zero 的回复:]
自动修改?什么意思,怎么修改的?
我想你的逻辑可能错了
你在sendFlag_judge这个函数里面做循环会死机的

你可以每隔一段时间调用这个函数,传入不同的参数。比如timer
VB codePrivateSub Timer1_Timer()If senf=2Then
MsgBox
Timer1.Enabled=FalseEndIfEnd Sub
如果符合条件就停止timer
[/Quote]

支持这个
tiandi79 2009-11-06
  • 打赏
  • 举报
回复
上文中的sendFlag_judge(i)更改为sendFlag_judge(sendf)
tiandi79 2009-11-06
  • 打赏
  • 举报
回复
我做个大致的例子,因为不知道你最后究竟要实现什么功能.
你添加一个timer在你的form上,并设置好interval.
参照以下code来实现.


Private Sub Timer1_Timer()
sendf=myRecord.Fields("SendFlag").Value
sendFlag_judge(i)
End Sub

Function sendFlag_judge(sendf As String) As String Dim SF As Integer
if sendf == 2 then MsgBox "信息发送成功!"
end function







clear_zero 2009-11-06
  • 打赏
  • 举报
回复
在数据库里面
你会不会从数据库相应表中取值?

如果你会做的话,那么就是定时从数据库里面取然后判断下就好了
lijuan1215_2009 2009-11-06
  • 打赏
  • 举报
回复
Sendf是access数据库表中的一个值,
sendf=myRecord.Fields("SendFlag").Value
请指教一下。
tiandi79 2009-11-06
  • 打赏
  • 举报
回复
不用像8楼这样,要看你的sendf值在程序里究竟是怎么来的即可.

如果你自己都不能拿到sendf来源(code),才用8楼那方法
lijuan1215_2009 2009-11-06
  • 打赏
  • 举报
回复
对的,sendf是一个动态的值,变到2时不再改变了。就是要读取这个值,怎么写代码呢,像8楼说的那样吗
tiandi79 2009-11-06
  • 打赏
  • 举报
回复
你说的意思我明白了。就是说就算sendf变化了,但是它的值传不到SF那里去。//对的,就是这个意思.

sendf再怎么变化,也是在你调用sendFlag这个function,并且处理完这个function之后的事了,你的程序一直在处理这个function,所以function里面正在处理的这个sendf仍旧是1.

置于要正确的程序,由于不太清除你这个sendf的值是怎么来的,所以无法给你太多信息了.你可以尝试帖一下sendf取值的方法,我估计应该也是有个循环的或者计时器,否则如何取动态值.
lijuan1215_2009 2009-11-06
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 tiandi79 的回复:]
估计是你没看明白我说的话,你整个程序的逻辑有问题.
我们假设前面有个i是从1变化到2的,当1的时候你想让循环继续,到2的时候让循环结束,并且显示信息发送成功,应该是这样的吧.
于是前面有
for i=1 to 2
    sendFlag_judge(i)
end for  '忘了vb for是不是这样写的,我们先把int to string的过程忽略

Function sendFlag_judge(sendf As String) As String  Dim SF As Integer
While SF < 2
    SF = sendf
    Wend
    MsgBox "信息发送成功!"
End Function
那么第一次i=1的时候调用sendFlag_judge(1),第2句SF <2是true,第3句SF=1,于是通过wend循环回第2句,SF这时候=1,仍旧小于2是true,于是又到第3句SF=1(这里仍旧是1,而不是2!!!!!!!!,且永远等于1!!!!)

不知道你这次看明白了没有,再看不明白我也没办法了.
正确的做法是直接
Function sendFlag_judge(sendf As String) As String  Dim SF As Integer
        if sendf == 2 then MsgBox "信息发送成功!"
end function
[/Quote]


谢谢,你说的意思我明白了。就是说就算sendf变化了,但是它的值传不到SF那里去。
你写的那个可以做到吗?
并且从0变到1再变到2,这个时间是不是一定的,就像你发一条短息,有的时候很快收到,有的时候却很慢,也和你的手机信号有关。所以要不停的查询状态标志位sendf才可以。
加载更多回复(13)

7,763

社区成员

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

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