我在做一段测试,目的是为了统计一段代码执行所用的时间,我设置了一个定时器,同时设置了一个bool b,在定时器里面设置的代码如下: if(b)
{
count++;//初始化count =0,定时器设置是SetTimer(1,1,NULL)放在OnIndialog里面的,
}
在测试代码执行之前我把b= true; 这个时候就应该开始计时了,然后在等我要测试的代码执行完了我再显示这个count的值,代码如下:
b=true;
proc->execute();//要统计执行时间的一段代码
CString str;
str.Format("%S",count);
MessageBox(str);
但是我这边显示的str的值是NULL,调试执行count的值是0,刚开始的时候定时器里面的代码执行了,但是在执行proc->execute();这个代码的阶段怎么也不跳到定时器里面去执行,这个是什么原因,难道是引文我的proc->execute();这段代码执行的时间不到千分之一秒??到底是什么原因啊????????????????????????????
{
count++;//初始化count =0,定时器设置是SetTimer(1,1,NULL)放在OnIndialog里面的,
}
在测试代码执行之前我把b= true; 这个时候就应该开始计时了,然后在等我要测试的代码执行完了我再显示这个count的值,代码如下:
b=true;
proc->execute();//要统计执行时间的一段代码
CString str;
str.Format("%S",count);
MessageBox(str);
但是我这边显示的str的值是NULL,调试执行count的值是0,刚开始的时候定时器里面的代码执行了,但是在执行proc->execute();这个代码的阶段怎么也不跳到定时器里面去执行,这个是什么原因,难道是引文我的proc->execute();这段代码执行的时间不到千分之一秒??到底是什么原因啊????????????????????????????
解决方案 »
- 使用libdnet.lib开发编译问题!!!
- vc++ 重载的构造函数 编译出错 这是为啥?
- 有可以禁止别人(局网)上网的软件吗
- SnmpCreateVbl SnmpSetVb了解不深
- 急救!!!SOS!!!:怎么获取滚动条的Enalbe状态???
- 如果要找人做几张软件界面的图片,该找谁或什么公司,会是什么价格,大家推荐一下?
- 请问这个问题如何解决!急急急!
- 用VC.net生成的项目有办法可以在vc6.0环境下再调试编辑么
- VC技术内幕中一个小问题@!@@!@!@!@!@!@!@!@
- SAFEARRAY问题?急阿!
- 我高不高
- CDHtmlDialog中调用javascript函数时存在延迟..
DWORD b = GetTickCount();
你的代码
DWORD a = GetTickCount();
DWORD timeElapse = a - b;
就本身问题而论,LZ的计时器应该还没有开始计时,也就是楼主在b=true时,定时器并没有运作.
实例可能如下:
1:Dia中设定了计时器,并B=false;
2:按下Dia中的某一BUTTON时,b=true;::Sleep(1000);显示count的值;b=false;
此时count当然为0,因为按下BUTTON时,消息循环中处于处于按下BUTTON的消息中,没有进行到处理定时器发送的消息中。
如果,按下BUTTON中不设定b=false;那么,等会再按下BUTTON,才会看到显示count的值更改,这个空闲时间才会处理定时器消息
这其中要用到数据类型LARGE_INTEGER
数据类型LARGE_INTEGER既可以是一个8字节长的整型数,也可以是两个4字节长的整型数的联合结构, 其具体用法根据编译器是否支持64位而定。该类型的定义如下:
typedef union _LARGE_INTEGER
{
struct
{
DWORD LowPart ;// 4字节整型数
LONG HighPart;// 4字节整型数
};
LONGLONG QuadPart ;// 8字节整型数
}LARGE_INTEGER ;例子:
LARGE_INTEGER liStart,liEnd,liFreq;
double dfMinus, dfFreq, dfTim;
LONGLONG QPart1,QPart2;
QueryPerformanceFrequency(&liFreq);
dfFreq = (double)liFreq.QuadPart;
QueryPerformanceCounter(&liStart);//do somethingQueryPerformanceCounter(&liEnd);
QPart2 = liEnd.QuadPart;
QPart1 = liStart.QuadPart;
dfMinus = (double)(QPart2-QPart1);
dfTim = dfMinus / dfFreq;
m_strTimeTip.Format(_T("本次处理耗时:%fms"),dfTim);