vb调用winrar解压缩为什么cpu还会100%呢?
我已经加上了下面的shellwait函数了,为什么执行到这句了cpu消耗还会是100%呢?
那位大虾指点下阿,万分感谢……
rarPath = apppath & "\coms\winrar"
rarcomm = apppath & "\coms\winrar.exe x -O+ " & filePath & " " & apppath & "\temp"
ShellWait (rarcomm)
import.barName.Caption = "正在解压缩,请稍候……"
DoEvents
DoEvents
……
Sub ShellWait(sCommandLine As String) '等到外部程序执行完成
Dim hShell as Long, hProc As Long, lExit As Long
hShell = Shell(sCommandLine, vbHide)
hProc = OpenProcess(&H400, False, hShell)
Do
GetExitCodeProcess hProc, lExit
DoEvents
DoEvents
Loop While lExit = &H103
End Sub
问题点数:25、回复次数:10Top
1 楼laviewpbt(人一定要靠自己)回复于 2006-03-09 15:23:24 得分 5
Do
GetExitCodeProcess hProc, lExit
DoEvents
DoEvents
Loop While lExit = &H103
的原因Top
2 楼panpan_bnu(攀攀)回复于 2006-03-13 15:07:13 得分 0
能说详细一点么? 是&H103的原因?Top
3 楼Silo(炽天之翼)回复于 2006-03-13 15:42:08 得分 0
&H103是VB里的一个常数:STILL_ACTIVE
你winrar没有结束,ShellWait函数就一直在循环啊,所以CPU 100%。Top
4 楼lc_mtt(柠檬把大飞猪裤子一脱...被大飞猪投诉了)回复于 2006-03-13 15:48:15 得分 5
你可以在DO循环里面加个sleep(500),这样可以引起CPU调度,腾出CPU时间。Top
5 楼panpan_bnu(攀攀)回复于 2006-03-13 16:13:05 得分 0
回炽天之翼:我原来想加上shellwait的就是为了防止程序继续执行导致cpu消耗
这种方法不行,我应该怎么办呢?
回柠檬:谢谢你的提示阿,可是我加上了还是不行啊……sleep的声明是这样写的吧: Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Top
6 楼Silo(炽天之翼)回复于 2006-03-13 17:14:18 得分 0
apppath?
你是不是笔误?
App.Path试试。。?Top
7 楼Silo(炽天之翼)回复于 2006-03-13 17:25:58 得分 10
还有,问一句哈,CPU100%时的那个进程名是什么?是winrar.exe么?
如果是的话,因为winrar没有结束,所以ShellWait函数一直退出不了,因此cpu占用率会高。
或许你可以中止掉winrar的进程:
Public Sub subKillProcess(ByVal strProcess As String)
Dim strComputer As String
Dim objWMIService As Object
Dim colProcessList
Dim objProcess As Object
strProcess="winrar.exe" '你想要中止的进程
On Error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = '" & strProcess & "'")
Debug.Print colProcessList
For Each objProcess In colProcessList
objProcess.Terminate
Next
End Sub
Top
8 楼panpan_bnu(攀攀)回复于 2006-03-15 10:16:25 得分 0
回炽天之翼:
apppath是与app.path有关的一个变量,之前的赋值语句我没有贴出来。
那个进程是winrar的,不过占用cpu最高的进程是瑞星的ravmond.exe,如果结束了ravmond.exe,占用cpu最高的进程就是winrar。应该是解压时瑞星在监控吧。
如果不结束ravmond.exe解压缩50m的东西cpu100%的时间是两分钟,如果结束了ravmond.exe那么cpu100%的时间只有十多秒了~~~
我必须用winrar解压缩,那么是不是就不能避免cpu100%呢Top
9 楼flyingscv(zlj)回复于 2006-03-15 12:36:01 得分 5
如果是winrar占了100%,就没好办法了
Top
10 楼panpan_bnu(攀攀)回复于 2006-03-16 10:42:39 得分 0
恩,了解了,谢谢各位^_^Top




