当前位置:编程学习 > VB >>

VB 编程,关于毫时代码,怎么样才能这段代码不造成程序不响应

Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Command1_Click()
Dim a As Integer, b As Integer, c As Integer, d As Integer
Dim e As Integer, f As Integer, g As Integer
For a = 1 To 48 Step 2
Sleep 10
For b = 1 To 48 Step 2
Sleep 10
For c = 1 To 48 Step 2
Sleep 10
For d = 1 To 48 Step 2
Sleep 10
For e = 1 To 48 Step 2
Sleep 10
For f = 1 To 48 Step 2
Sleep 10
For g = 1 To 48 Step 2
If a + b + c + d + e + f + g = 48 Then
Print a; b; c; d; e; f; g
Print
Print
End If

Next g
Next f
Next e
Next d
Next c
Next b
Next a

End Sub
追问:如果你能写个列子上,本人感激不尽!!

答案:DoEvents是把控制权交给CPU

楼主的循环加了SLEEP

应该要算蛮久

如果要程序响应就要涉及多线程技术

提供几个多线程用的API

'创建线程API

'此API经过改造,lpThreadAttributes改为Any型,lpStartAddress改为传值引用:

'因为函数入口地址是由形参变量传递,如果用传址那将传递形参变量的地址而不是函数的入口地址

' 参数dwStackSize为应用程序堆栈大小,lpStartAddress为函数入口地址

Private Declare Function CreateThread Lib "kernel32" (ByVal lpThreadAttributes As Any, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, LpthreadId As Long) As Long

'终止线程API

Private Declare Function TerminateThread Lib "kernel32" (ByVal hThread As Long, ByVal dwExitCode As Long) As Long

'激活线程API,参数hThread为CreateThread创建的线程句柄

Private Declare Function ResumeThread Lib "kernel32" (ByVal hThread As Long) As Long

'挂起线程API

Private Declare Function SuspendThread Lib "kernel32" (ByVal hThread As Long) As Long

至于详细的代码我建议你百度一下,很多例子

Dim a As Integer, b As Integer, c As Integer, d As Integer
Dim e As Integer, f As Integer, g As Integer
For a = 1 To 48 Step 2
For b = 1 To 48-a Step 2
For c = 1 To 48-a-b Step 2
For d = 1 To 48-a-b-c Step 2
For e = 1 To 48-a-b-c-d Step 2
For f = 1 To 48-a-b-c-d-e Step 2
For g = 1 To 48-a-b-c-d-e-f Step 2
If a + b + c + d + e + f + g = 48 Then
Print a; b; c; d; e; f; g
Print
Print
End If

Next
Next
Next
Next
Next
Next
Next

48^7 = 587068342272,还加Sleep,你这程序什么时候才能出结果啊?过程需要优化啊。

不造成程序不响应,是需要开线程的,让线程来计算。不要用Sleep。

多线程

将Sleep 10改为DoEvents程序不会无响应,不过速度会很慢。

7个单数合计=48 可能吗?

FOR 改成DO 虽然有些慢

上一个:VB 编程和C++区别?以及它和JAVA区别?请指教
下一个:平面机构运动分析杆组法的VB编程内容??详细的

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,