sách gpt4 ai đã đi

Sự kiện Timer có thể nhập lại được không?

In lại 作者:行者123 更新时间:2023-12-01 08:28:39 34 4
mua khóa gpt4 Nike

我正在检查一些可怕的遗留代码,这些代码具有 Timer 事件以及一些包含 DoEvents 调用的冗长代码。简化版如下所示:

   Private Sub tmrProcess_Timer()
'Run some slow processing code here
DoEvents
'More slow code here
DoEvents
'Lots more slow code and the occasional DoEvents here
If booComplete Then
tmrProcess.Enabled = False
End If
End Sub

计时器的间隔设置为 250,慢代码可能需要 30 秒左右才能完成。请注意,表单上有一个按钮在单击时设置 booComplete = True。

鉴于 VB6 是单线程的并且计时器消息的优先级较低,是否完全有可能在 DoEvents 调用期间重新输入 Timer 事件,或者如果 Timer 事件发生,VB6 运行时会阻止 Timer 事件的执行正在执行?

This reference有一些相关信息。特别是它指出 WM_PAINT 消息被组合成一条消息,但没有提及 WM_TIMER 消息是否被组合。

1 Câu trả lời

我预计它会重新进入,但似乎不会

看看下面的测试项目:

'1 form with:
' 1 timer control : Name=Timer1

Option Explicit

Private Sub Form_Load()
WindowState = vbMaximized
Timer1.Interval = 2000
End Sub

Private Sub Timer1_Timer()
Static intCount As Integer
Dim sngTime As Single
intCount = intCount + 1
Print CStr(Now) & " Timer event fired " & CStr(intCount)
sngTime = Timer + 3
Do While sngTime > Timer
DoEvents
Loop
Print CStr(Now) & " End of timer event " & CStr(intCount)
End Sub
  • 您将在表单加载 2 秒后看到“开始”
  • 您将在 3 秒后看到“结束”
  • 您将在前一个“结束”显示 2 秒后看到一个“开始”
  • 您会在“开始”后 3 秒看到“结束”
  • ...

如果重新输入计时器,我预计每次“开始”之间有 2 秒,但每次“开始”之间似乎有 3+2=5 秒

删除 DoEvents 不会改变行为,它只会改变打印文本的时间

关于timer - Timer 事件可以重入吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24159308/

34 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com