CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  API

vb调用winrar解压缩为什么cpu还会100%呢?

楼主panpan_bnu(攀攀)2006-03-09 15:18:02 在 VB / API 提问

我已经加上了下面的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

相关问题

  • !######## 关于vb调用winRAR的问题
  • VB调用winrar压缩文件
  • VB调用WebService?
  • vb 调用 VC7 dll
  • vb 调用 VC7 dll
  • VB调用SQL SERVER
  • 在VB中如何调用压缩工具winrar
  • VB如何调用SQL Server7.0?
  • VB咋样调用API
  • 如何调用Direct(用VB)

关键词

  • winrar
  • cpu
  • 函数
  • 执行
  • sleep
  • shellwait
  • h103
  • lexit
  • colprocesslist
  • doevents

得分解答快速导航

  • 帖主:panpan_bnu
  • laviewpbt
  • lc_mtt
  • Silo
  • flyingscv

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo