各位高手:前几天我用VC变了一个处理位图的程序,结构采用单文档的视图分割,将试图分割为3个子视图,两个CView类,一个CFormView类,主要数据放在文档类中,要处理的位图比较大,用CArray存放位图的每个象素值,程序中需要处理的数据比较多,CPU的占用率几乎在程序运行的时候都是100%,但这些都是一些比较简单的操作,无非就是改变位图的一些数据,在显示出来。(位图的操作用VC技术内幕中的CDIB类)现在我想请教:1、 怎么样才能使程序在时间上运行慢一点,避免CPU占用太多,除了Sleep()还有没有其他的方法。2、在程序运行的过程中,(没有设置鼠标忙)当我将鼠标移到任务栏上该程序所在位置时,程序就会被卡住,几个视图都不更新(试图更新都是调用相应类的OnDraw函数),内部数据还在运算。等到程序结束的时候,视图才会更新。
最好是在自己的heap中申请内存,参考HeapCreate, HeapAlloc, HeapReAlloc. 这样比较快,而且出错的时候不会影响到其它模块。
我是将CArray作为文档的成员变量,在开始进行复杂的运算以前,已经为其通过成员函数SetSize()分配了内存。我要处理的数据是以每个象素点为单位。个人觉得这样可能方便一些。
我所涉及的复杂运算主要是在我的一个循环中,在一次迭代中,需要检查位图中每个象素的取值,并且改变一些象素点的值(这里的判断条件比较多,算法不能简化了,计算量也可能较大),然后在将这幅位图在原来的视图窗口中更新。