解决方案 »

  1.   

    软件只能在硬件允许的范围内做控制,cpu的控制只限于升降操作,对进程来说就是用优先级和sleep等方法让出资源,靠几句代码就能随意控制cpu使用率,那所有厂商都把自己cpu写100%,病毒也写100%,你还能玩你的导出吗
      

  2.   

    哈哈,《编程之美》第一题。据说是微软面试题哦,大学的时候我做过。http://blog.csdn.net/wesweeky/article/details/6402564
    http://www.360doc.com/content/12/0415/00/1798914_203669162.shtml
    http://www.cppblog.com/Fox/archive/2008/04/17/control_cpu_using_curve.html关键在于用GetTickCount()和Sleep()让出CPU时间。
      

  3.   

    这个真不会,哈哈,项目中应该不会这么变态吧。之前只遇到过CPU超过90%就发出报警的需求。可以降自身cpu占用,没见过。关键是正在执行的时候,监控线程能否sleep当前线程呢,什么时候又结束sleep,又如何保证cpu占有率?求高手!
      

  4.   


    线程sleep,是已经考虑并且使用的策略。具体的就是,数据量很大的情况下,导出的Excel需要分割成多个工作表(Sheet),我会在导出一个工作表之后的间隔Sleep若干。但是这只是“将就”着的策略。其实我最大的目标是既可以降低CPU占用,又可以降低内存占用、硬盘读取占用,但是内存和硬盘的控制可能会更难,所以,首先考虑的是CPU占用这部分。
      

  5.   

    回2楼:
    我需要解决的问题,并不是在于绘制“任务管理器”曲线,而是一种成熟、轻松的控制进程的方案。版主提供的链接,我已经看过。理论上来讲,是可以实现我前面提出的需求。但是在我这里面来说,不太实用。首先,导出报表核心的代码就是循环读取的同时循环写入。如果在这期间增加检测CPU状态的代码,反而会增加额外的开销。而且有可能是几何级的递增。其次,导出报表的代码本身已经足够复杂了,增加进程控制,就会更加复杂,所以,我希望最好是在申请进程之外进行控制。