vb程序中暂停&继续的问题!

fjun_1118 2008-03-13 04:07:44
我再应用vb+运动控制卡进行项目研发!但是vb我才刚学,现在有一个问题:在程序开始后,我想让它通过“暂停”按钮停下来,就像单片机中中断一样,按“继续”后,程序接暂停前继续运行,不受暂停的任何影响。一个命令键或两个命令键均可!注:我看过网上的暂停程序,使用doevents函数,我的运动控制程序中也用到这个函数,也就是说暂停时候程序可能就在运行此函数。希望大家多多帮忙!谢谢!
...全文
1373 点赞 收藏 27
写回复
27 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
fjun_1118 2008-03-15
嗯 ,谢谢大家如此帮忙!受益非浅!
回复
哈哈,你们遇上了"CSDN发帖不成功"病毒!!!!!!!!!!!!
回复
fjun_1118 2008-03-14
怎么回事?我昨天也发不上来,今天才看到!晕死,谢谢大家!我先看看!
回复
heanhong 2008-03-14
要暂定的时候弹出一个msgbox ,要恢复的时候点掉msgbox 不就OK了
回复
cbm6666 2008-03-14

dim starttm&,ISStop as boolean '放到最上面通用区
Sub WaitMe(Delaytm&)
ISStop = False
Starttm = Timer
Do
DoEvents
If ISStop Then Exit Do
Loop Until Timer - Starttm > = Delaytm '假设DElayym等于5, 5秒后不管有没有被激发都退出Do...Loop
End Sub
回复
cbm6666 2008-03-14
Dim ISStop as boolean '放到最上面的通用区
Sub WaitMe()
Do
DoEvents
if ISStop then exit do
'sleep(1)
Loop
ISStop = False
End Sub
回复
cbm6666 2008-03-14
Dim ISStop as boolean '放到最上面的通用区
Sub WaitMe()
Do Until ISStop
DoEvents
if ISStop then exit do
sleep(1)
Loop
ISStop = False
End Sub
回复
fjun_1118 2008-03-14
If Me.Stop.Caption = "暂停" Then
Me.Stop.Caption = "继续"
ISStop = False
Call WaitMe
Else
Me.Stop.Caption = "暂停"
'''''''''''''''''''''''''Thread_Suspend = ResumeThread(hThread) '不要
ISStop = True
End If
End Sub

Sub WaitMe()
Do Until ISStop
DoEvents
sleep(1)
Loop
ISStop = False
End Sub

这是搜到的程序,但是关于我删除的那一句 启用线程 我不是很明白!
可以完成暂停任务,但是运动命令一旦执行,机器仍然会等到这条运动指令结束后才暂停
又没有关于多线程方面的办法?这个方面我是一点都不懂啊!
回复
lyserver 2008-03-13
可以使用Event对象.
程序开始时,创建和设置Event对象,CreateEvent和SetEvent(置位).
程序运行中(即主要任务处),在循环使用WaitSingleObject等待Event状态,如果没有复位,则处理你自己的任务和热键,当热键被按下,则ResetEvent(复位)Event对象,为了减少循环的CPU资源占用,还可使用DoEvent释放CPU资源.
回复
cbm6666 2008-03-13
晕.....再贴一次

'思路如下
'点了 "开始" 出现 "暂停"
'点了 "暂停" 后开始计时,时间到自动 "开始"
'如果延时时间尚未到,而此时点了"继续",则取消延时,自动 "开始"

Dim i&, Starttm&, ForceStop As Boolean
Private Sub Form_Load()
Command1.Caption = "开 始"
Timer1.Interval = 100
Timer1.Enabled = False
End Sub

Private Sub Command1_Click()
Timer1.Enabled = Not Timer1.Enabled
Select Case Command1.Caption
Case Is = "暂 停"
Timer1.Enabled = False
Command1.Caption = "继 续"
Call MySleep(10)
Case Is = "继 续"
Timer1.Enabled = True
Command1.Caption = "暂 停"
ForceStop = True
Case Else
Timer1.Enabled = True
Command1.Caption = "暂 停"
End Select
End Sub

Private Sub Timer1_Timer()
Me.Caption = CStr(i)
i = IIf(i >= 1000, 0, i + 1)
End Sub

Sub MySleep(Delaytm&)
Command1.Caption = "继 续"
ForceStop = False
Starttm = Timer
Do
DoEvents
If ForceStop Then Exit Do
Loop Until Timer - Starttm >= Delaytm
Command1.Caption = "开 始"
Command1_Click
End Sub
回复
cbm6666 2008-03-13
怪事,怎么连发两次都没上来 ??
回复
cbm6666 2008-03-13
'思路如下
'点了 "开始" 出现 "暂停"
'点了 "暂停" 后开始计时,时间到自动 "开始"
'如果延时时间尚未到,而此时点了"继续",则取消延时,自动 "开始"

Dim i&, Starttm&, ForceStop As Boolean
Private Sub Form_Load()
Command1.Caption = "开 始"
Timer1.Interval = 100
Timer1.Enabled = False
End Sub

Private Sub Command1_Click()
Timer1.Enabled = Not Timer1.Enabled
Select Case Command1.Caption
Case Is = "暂 停"
Timer1.Enabled = False
Command1.Caption = "继 续"
Call MySleep(10)
Case Is = "继 续"
Timer1.Enabled = True
Command1.Caption = "暂 停"
ForceStop = True
Case Else
Timer1.Enabled = True
Command1.Caption = "暂 停"
End Select
End Sub

Private Sub Timer1_Timer()
Me.Caption = CStr(i)
i = IIf(i >= 1000, 0, i + 1)
End Sub

Sub MySleep(Delaytm&)
Command1.Caption = "继 续"
ForceStop = False
Starttm = Timer
Do
DoEvents
If ForceStop Then Exit Do
Loop Until Timer - Starttm >= Delaytm
Command1.Caption = "开 始"
Command1_Click
End Sub

回复
ExeMan 2008-03-13
do
If blStop = True Then Exit Do
DoEvents()
loop
回复
cbm6666 2008-03-13
'思路如下
'点了 "开始" 出现 "暂停"
'点了 "暂停" 后开始计时,时间到自动 "开始"
'如果延时时间尚未到,而此时点了"继续",则取消延时,自动 "开始"

Dim i&, Starttm&, ForceStop As Boolean
Private Sub Form_Load()
Command1.Caption = "开 始"
Timer1.Interval = 100
Timer1.Enabled = False
End Sub

Private Sub Command1_Click()
Timer1.Enabled = Not Timer1.Enabled
Select Case Command1.Caption
Case Is = "暂 停"
Timer1.Enabled = False
Command1.Caption = "继 续"
Call MySleep(10)
Case Is = "继 续"
Timer1.Enabled = True
Command1.Caption = "暂 停"
ForceStop = True
Case Else
Timer1.Enabled = True
Command1.Caption = "暂 停"
End Select
End Sub

Private Sub Timer1_Timer()
Me.Caption = CStr(i)
i = IIf(i >= 1000, 0, i + 1)
End Sub

Sub MySleep(Delaytm&)
Command1.Caption = "继 续"
ForceStop = False
Starttm = Timer
Do
DoEvents
If ForceStop Then Exit Do
Loop Until Timer - Starttm >= Delaytm
Command1.Caption = "开 始"
Command1_Click
End Sub

回复
fjun_1118 2008-03-13
于目标机器积极拒绝,无法连接。 192.168.1.242:8086
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Net.Sockets.SocketException: 由于目标机器积极拒绝,无法连接。 192.168.1.242:8086

源错误:

执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。
回复
fjun_1118 2008-03-13
但是我不要求复位的,只要求暂停!保存状态不太好办!比如我的机器正在插补运行,参数很多,如何保持状态呢?
我想达到中断的效果,但是不想那么复杂地处理!响应中断时会保存所有现在的值,然后处理中断,完毕后来继续进行未完的操作!但是我不想去保存那么多的状态,有什么方法!
回复
fjun_1118 2008-03-13
但是我不要求复位的,只要求暂停!保存状态不太好办!比如我的机器正在插补运行,参数很多,如何保持状态呢?
我想达到中断的效果,但是不想那么复杂地处理!响应中断时会保存所有现在的值,然后处理中断,完毕后来继续进行未完的操作!但是我不想去保存那么多的状态,有什么方法!
回复
fjun_1118 2008-03-13
但是我不要求复位的,只要求暂停!保存状态不太好办!比如我的机器正在插补运行,参数很多,如何保持状态呢?
我想达到中断的效果,但是不想那么复杂地处理!响应中断时会保存所有现在的值,然后处理中断,完毕后来继续进行未完的操作!但是我不想去保存那么多的状态,有什么方法!
回复
fjun_1118 2008-03-13
但是我不要求复位的,只要求暂停!保存状态不太好办!比如我的机器正在插补运行,参数很多,如何保持状态呢?
我想达到中断的效果,但是不想那么复杂地处理!响应中断时会保存所有现在的值,然后处理中断,完毕后来继续进行未完的操作!但是我不想去保存那么多的状态,有什么方法!
回复
fjun_1118 2008-03-13
但是我不要求复位的,只要求暂停!保存状态不太好办!比如我的机器正在插补运行,参数很多,如何保持状态呢?
我想达到中断的效果,但是不想那么复杂地处理!响应中断时会保存所有现在的值,然后处理中断,完毕后来继续进行未完的操作!但是我不想去保存那么多的状态,有什么方法!
回复
加载更多回复
相关推荐
发帖
VB基础类
创建于2007-09-28

7489

社区成员

VB 基础类
申请成为版主
帖子事件
创建了帖子
2008-03-13 04:07
社区公告
暂无公告