VC中如何得到一个线程的效率
2006-05-24 14:39
274 查看
//定义开始时间
LARGE_INTEGER fre,star_,end_;
QueryPerformanceFrequency(&fre);
QueryPerformanceCounter(&star_);
// 处理....
pro( mb);
//得到结束的时间
QueryPerformanceCounter(&end_);
ACE_DEBUG((LM_INFO,ACE_TEXT(" (%t) 处理时间%i/n"),
long((end_.QuadPart - star_.QuadPart) * 10000 / fre.QuadPart)));
这个地方打印出来的时间是1个单位为0.1个毫秒
ACE_hrtime_t startTime = ACE_OS::gethrtime();
ACE_INLINE ACE_hrtime_t
ACE_OS::gethrtime (const ACE_HRTimer_Op op)
{
ACE_OS_TRACE ("ACE_OS::gethrtime");
#if defined (ACE_HAS_HI_RES_TIMER)
ACE_UNUSED_ARG (op);
return ::gethrtime ();
#elif defined (ACE_HAS_AIX_HI_RES_TIMER)
ACE_UNUSED_ARG (op);
timebasestruct_t tb;
::read_real_time(&tb, TIMEBASE_SZ);
::time_base_to_time(&tb, TIMEBASE_SZ);
return ACE_hrtime_t(tb.tb_high) * ACE_ONE_SECOND_IN_NSECS + tb.tb_low;
#elif defined (ACE_WIN32)
ACE_UNUSED_ARG(op);
LARGE_INTEGER freq;
::QueryPerformanceCounter (&freq);
# if defined (ACE_LACKS_LONGLONG_T)
ACE_UINT64 uint64_freq (freq.u.LowPart,
static_cast<unsigned int> (freq.u.HighPart));
return uint64_freq;
# else
return freq.QuadPart;
# endif //ACE_LACKS_LONGLONG_T
#elif defined (ghs) && defined (ACE_HAS_PENTIUM)
ACE_UNUSED_ARG (op);
// Use .obj/gethrtime.o, which was compiled with g++.
return ACE_GETHRTIME_NAME ();
#elif (defined (__GNUG__) || defined (__INTEL_COMPILER)) && !defined(ACE_VXWORKS) && defined (ACE_HAS_PENTIUM)
ACE_UNUSED_ARG (op);
# if defined (ACE_LACKS_LONGLONG_T)
double now;
# else /* ! ACE_LACKS_LONGLONG_T */
ACE_hrtime_t now;
# endif /* ! ACE_LACKS_LONGLONG_T */
// Read the high-res tick counter directly into memory variable "now".
// The A constraint signifies a 64-bit int.
asm volatile ("rdtsc" : "=A" (now) : : "memory");
# if defined (ACE_LACKS_LONGLONG_T)
ACE_UINT32 least, most;
ACE_OS::memcpy (&least, &now, sizeof (ACE_UINT32));
ACE_OS::memcpy (&most, (u_char *) &now + sizeof (ACE_UINT32),
sizeof (ACE_UINT32));
ACE_hrtime_t ret (least, most);
return ret;
# else /* ! ACE_LACKS_LONGLONG_T */
return now;
# endif /* ! ACE_LACKS_LONGLONG_T */
#elif defined (linux) && defined (ACE_HAS_ALPHA_TIMER)
// NOTE: alphas only have a 32 bit tick (cycle) counter. The rpcc
// instruction actually reads 64 bits, but the high 32 bits are
// implementation-specific. Linux and Digital Unix, for example,
// use them for virtual tick counts, i.e., taking into account only
// the time that the process was running. This information is from
// David Mosberger's article, see comment below.
ACE_UINT32 now;
// The following statement is based on code published by:
// Mosberger, David, "How to Make Your Applications Fly, Part 1",
// Linux Journal Issue 42, October 1997, page 50. It reads the
// high-res tick counter directly into the memory variable.
asm volatile ("rpcc %0" : "=r" (now) : : "memory");
return now;
#elif defined (ACE_HAS_POWERPC_TIMER) && (defined (ghs) || defined (__GNUG__))
// PowerPC w/ GreenHills or g++.
ACE_UNUSED_ARG (op);
u_long most;
u_long least;
#if defined (ghs)
ACE_OS::readPPCTimeBase (most, least);
#else
u_long scratch;
do {
asm volatile ("mftbu %0/n"
"mftb %1/n"
"mftbu %2"
: "=r" (most), "=r" (least), "=r" (scratch));
} while (most != scratch);
#endif
#if defined (ACE_LACKS_LONGLONG_T)
return ACE_U_LongLong (least, most);
#else /* ! ACE_LACKS_LONGLONG_T */
return 0x100000000llu * most + least;
#endif /* ! ACE_LACKS_LONGLONG_T */
#elif defined (ACE_HAS_CLOCK_GETTIME)
// e.g., VxWorks (besides POWERPC && GreenHills) . . .
ACE_UNUSED_ARG (op);
struct timespec ts;
ACE_OS::clock_gettime (
#if defined (ACE_HAS_CLOCK_GETTIME_MONOTONIC)
CLOCK_MONOTONIC,
#endif /* !ACE_HAS_CLOCK_GETTIME_MONOTONIC */
CLOCK_REALTIME,
&ts);
// Carefully create the return value to avoid arithmetic overflow
// if ACE_hrtime_t is ACE_U_LongLong.
return static_cast<ACE_hrtime_t> (ts.tv_sec) *
ACE_U_ONE_SECOND_IN_NSECS + static_cast<ACE_hrtime_t> (ts.tv_nsec);
#else
ACE_UNUSED_ARG (op);
ACE_Time_Value const now = ACE_OS::gettimeofday ();
// Carefully create the return value to avoid arithmetic overflow
// if ACE_hrtime_t is ACE_U_LongLong.
return (static_cast<ACE_hrtime_t> (now.sec ()) * (ACE_UINT32) 1000000 +
static_cast<ACE_hrtime_t> (now.usec ())) * (ACE_UINT32) 1000;
#endif /* ACE_HAS_HI_RES_TIMER */
}
LARGE_INTEGER fre,star_,end_;
QueryPerformanceFrequency(&fre);
QueryPerformanceCounter(&star_);
// 处理....
pro( mb);
//得到结束的时间
QueryPerformanceCounter(&end_);
ACE_DEBUG((LM_INFO,ACE_TEXT(" (%t) 处理时间%i/n"),
long((end_.QuadPart - star_.QuadPart) * 10000 / fre.QuadPart)));
这个地方打印出来的时间是1个单位为0.1个毫秒
ACE_hrtime_t startTime = ACE_OS::gethrtime();
ACE_INLINE ACE_hrtime_t
ACE_OS::gethrtime (const ACE_HRTimer_Op op)
{
ACE_OS_TRACE ("ACE_OS::gethrtime");
#if defined (ACE_HAS_HI_RES_TIMER)
ACE_UNUSED_ARG (op);
return ::gethrtime ();
#elif defined (ACE_HAS_AIX_HI_RES_TIMER)
ACE_UNUSED_ARG (op);
timebasestruct_t tb;
::read_real_time(&tb, TIMEBASE_SZ);
::time_base_to_time(&tb, TIMEBASE_SZ);
return ACE_hrtime_t(tb.tb_high) * ACE_ONE_SECOND_IN_NSECS + tb.tb_low;
#elif defined (ACE_WIN32)
ACE_UNUSED_ARG(op);
LARGE_INTEGER freq;
::QueryPerformanceCounter (&freq);
# if defined (ACE_LACKS_LONGLONG_T)
ACE_UINT64 uint64_freq (freq.u.LowPart,
static_cast<unsigned int> (freq.u.HighPart));
return uint64_freq;
# else
return freq.QuadPart;
# endif //ACE_LACKS_LONGLONG_T
#elif defined (ghs) && defined (ACE_HAS_PENTIUM)
ACE_UNUSED_ARG (op);
// Use .obj/gethrtime.o, which was compiled with g++.
return ACE_GETHRTIME_NAME ();
#elif (defined (__GNUG__) || defined (__INTEL_COMPILER)) && !defined(ACE_VXWORKS) && defined (ACE_HAS_PENTIUM)
ACE_UNUSED_ARG (op);
# if defined (ACE_LACKS_LONGLONG_T)
double now;
# else /* ! ACE_LACKS_LONGLONG_T */
ACE_hrtime_t now;
# endif /* ! ACE_LACKS_LONGLONG_T */
// Read the high-res tick counter directly into memory variable "now".
// The A constraint signifies a 64-bit int.
asm volatile ("rdtsc" : "=A" (now) : : "memory");
# if defined (ACE_LACKS_LONGLONG_T)
ACE_UINT32 least, most;
ACE_OS::memcpy (&least, &now, sizeof (ACE_UINT32));
ACE_OS::memcpy (&most, (u_char *) &now + sizeof (ACE_UINT32),
sizeof (ACE_UINT32));
ACE_hrtime_t ret (least, most);
return ret;
# else /* ! ACE_LACKS_LONGLONG_T */
return now;
# endif /* ! ACE_LACKS_LONGLONG_T */
#elif defined (linux) && defined (ACE_HAS_ALPHA_TIMER)
// NOTE: alphas only have a 32 bit tick (cycle) counter. The rpcc
// instruction actually reads 64 bits, but the high 32 bits are
// implementation-specific. Linux and Digital Unix, for example,
// use them for virtual tick counts, i.e., taking into account only
// the time that the process was running. This information is from
// David Mosberger's article, see comment below.
ACE_UINT32 now;
// The following statement is based on code published by:
// Mosberger, David, "How to Make Your Applications Fly, Part 1",
// Linux Journal Issue 42, October 1997, page 50. It reads the
// high-res tick counter directly into the memory variable.
asm volatile ("rpcc %0" : "=r" (now) : : "memory");
return now;
#elif defined (ACE_HAS_POWERPC_TIMER) && (defined (ghs) || defined (__GNUG__))
// PowerPC w/ GreenHills or g++.
ACE_UNUSED_ARG (op);
u_long most;
u_long least;
#if defined (ghs)
ACE_OS::readPPCTimeBase (most, least);
#else
u_long scratch;
do {
asm volatile ("mftbu %0/n"
"mftb %1/n"
"mftbu %2"
: "=r" (most), "=r" (least), "=r" (scratch));
} while (most != scratch);
#endif
#if defined (ACE_LACKS_LONGLONG_T)
return ACE_U_LongLong (least, most);
#else /* ! ACE_LACKS_LONGLONG_T */
return 0x100000000llu * most + least;
#endif /* ! ACE_LACKS_LONGLONG_T */
#elif defined (ACE_HAS_CLOCK_GETTIME)
// e.g., VxWorks (besides POWERPC && GreenHills) . . .
ACE_UNUSED_ARG (op);
struct timespec ts;
ACE_OS::clock_gettime (
#if defined (ACE_HAS_CLOCK_GETTIME_MONOTONIC)
CLOCK_MONOTONIC,
#endif /* !ACE_HAS_CLOCK_GETTIME_MONOTONIC */
CLOCK_REALTIME,
&ts);
// Carefully create the return value to avoid arithmetic overflow
// if ACE_hrtime_t is ACE_U_LongLong.
return static_cast<ACE_hrtime_t> (ts.tv_sec) *
ACE_U_ONE_SECOND_IN_NSECS + static_cast<ACE_hrtime_t> (ts.tv_nsec);
#else
ACE_UNUSED_ARG (op);
ACE_Time_Value const now = ACE_OS::gettimeofday ();
// Carefully create the return value to avoid arithmetic overflow
// if ACE_hrtime_t is ACE_U_LongLong.
return (static_cast<ACE_hrtime_t> (now.sec ()) * (ACE_UINT32) 1000000 +
static_cast<ACE_hrtime_t> (now.usec ())) * (ACE_UINT32) 1000;
#endif /* ACE_HAS_HI_RES_TIMER */
}
相关文章推荐
- VC++ 如何创建一个线程并传递参数
- VC如何得到一个文件夹的路径
- VC如何创建一个新的线程
- 如何给一个正在跑的线程传递东西,其实只要在其他类里,得到该线程的引用 就可以了<EOM>
- 如何在VC中利用系统函数创建一个新的线程
- VC如何对新创建的一个线程暂停或重启
- VC如何对新创建的一个线程暂停或重启
- VC中如何得到一个文件夹的路径
- 如何判断一个线程是否正在执行
- C#多线程(二) 如何操纵一个线程-转
- 如何等一个线程执行完执行另外一个线程,借助FutureTask类
- 如何获得RVA(相对虚地址)的值,从而得到一个程序的入口点
- VC中如何重命名一个文件?
- C#多线程学习(二) 如何操纵一个线程
- 不知道在MFC中如何从线程工作函数中向窗口发送消息?用好一个指针就够了
- VC中如何定义一个让所有源程序都能用的全局变量(对象)
- 一个优秀的Java程序员必须了解GC的工作原理、如何优化GC的性能、如何与GC进行有限的交互,有一些应用程序对性能要求较高,例如嵌入式系统、实时系统等,只有全面提升内存的管理效率,才能提高整个应用程序
- 如何摧毁一个程序员的效率?
- 如何得到一个数的个、十、百、千位数
- java 中 如何让一个方法内最多只能指定数量线程访问