怎样用宏解决计时开始和中止必须在运行时的有关问题?请看例子

怎样用宏解决计时开始和中止必须在运行时的问题?请看例子
//头文件timing.h内容:

#include <iostream>
#include<string>
#include<Windows.h>
using namespace std;

#ifndef timingstart/*定义计时开始的宏*/
#define timingstart \
LARGE_INTEGER frequency, start, end;\
if (QueryPerformanceFrequency(&frequency))\
{QueryPerformanceCounter(&start);}\
else\
{cout<<"本机不支持64位高精度计时"<<endl;}
#endif

#ifndef timingend /*定义计时结束并且显示函数耗时的宏*/
#define timingend \
QueryPerformanceCounter(&end);\
long double hertz=(long double)(frequency.QuadPart);\
cout<<"本函数运行历时"<<1000*(end.QuadPart-start.QuadPart)/hertz<<"毫秒"<<endl;
#endif

//程序源文件.c
#include <iostream>
#include<string>
#include<Windows.h>
#include"timing.h"
using namespace std;

int main(/*int argc, char* argv[]*/) 
{
timingstart

timingend
getchar();
return 0;}

运行结果:原来不用宏的时候,直接将计时的代码放在源文件里,可以正常显示耗时3.几毫秒或者4.几毫秒,一开始只把计时开始的代码变成宏,放入timing.h头文件里面,也可以正常显示耗时。然后再把计时结束的代码也变成宏,放进头文件。问题就来了——每次运行之后,都无一例外的显示耗时0毫秒。

我猜测可能问题出在计时开始和终结的时间点都变成编译时而不是运行时了,所以计算不出运行时的耗时长度。

关键是:如何解决这个问题呢?


------解决方案--------------------
你这招我用过,其实这不是问题。
如果显示0毫秒,唯一的问题就是你电脑太快了。
如果不信的话,你试试在程序源代码的timingstart和timingend这两个宏中间加入代码,比如:
cout<<"*戈壁,是操你妈个逼,团结整个戈壁打败河蟹*戈壁,是操你妈个逼,团结整个戈壁打败河蟹*戈壁,是操你妈个逼,团结整个戈壁打败河蟹*戈壁,是操你妈个逼,团结整个戈壁打败河蟹*戈壁,是操你妈个逼,团结整个戈壁打败河蟹*戈壁,是操你妈个逼,团结整个戈壁打败河蟹*戈壁,是操你妈个逼,团结整个戈壁打败河蟹*戈壁,是操你妈个逼,团结整个戈壁打败河蟹*戈壁,是操你妈个逼,团结整个戈壁打败河蟹"<<endl;

然后看看运行耗时是不是就有数字了?