VC中如何得到一个线程的效率

原创 2006年05月24日 14:39:00

//定义开始时间
  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启动一个新线程的三种方法

主要用AfxBeginThread()函数来 UINT  myproc(LPVOID  lParam) { CITTDlg *pWnd = (CITTDlg *)lParam; pWnd->KMe...
  • u014568921
  • u014568921
  • 2015年03月14日 19:53
  • 8174

VC退出线程的方法

标题很简单,但是要讨论的地方不少; 多线程管理,在程序开发中非常重要,虽然...
  • chinabinlang
  • chinabinlang
  • 2014年04月23日 10:24
  • 21634

VC线程安全退出的方法

1. 如果创建的线程属于阻塞类型的,比如线程函数中有套接字recv、sendto类似的操作,可能会死等着接收数据,这时想要退出该线程,只能用: BOOL TerminateThread( HANDL...
  • kelery
  • kelery
  • 2016年05月12日 10:05
  • 1173

【线程退出】:VC线程安全退出的方法

1. 如果创建的线程属于阻塞类型的,比如
  • dijkstar
  • dijkstar
  • 2014年06月03日 21:38
  • 6630

VC中创建多个线程的方法

作中我们经常会遇到要建立多个线程,以此方便于我们可以同时执行多个事件。这也是我们在VC开发中的一项基础,虽然我曾多次用到,但也会常常忘记。这次记下来,作为一个笔记,为大家学习提供方便。 在VC中...
  • bluelilyabc
  • bluelilyabc
  • 2014年01月27日 17:19
  • 415

VC++工作者线程关闭的问题

在使用MFC做一个activex小控件时引入了多线程,我使用的工作者线程,主体功能没有问题,但是退出IE浏览器里总是发生崩溃的问题,仔细跟了一下,发现是内存有泄露,其他的好都好说,new完后,记得de...
  • atrueman123
  • atrueman123
  • 2015年04月12日 12:55
  • 1008

MFC创建UI线程

ref : http://www.qingfengju.com/article.asp?id=113 UI 线程 是由CWinThread 派生类控制的,这个派生类和CWinApp 极为类似,实...
  • huasonl88
  • huasonl88
  • 2013年02月18日 22:50
  • 4815

秒杀多线程第六篇 经典线程同步 事件Event

阅读本篇之前推荐阅读以下姊妹篇: 《秒杀多线程第四篇 一个经典的多线程同步问题》 《秒杀多线程第五篇 经典线程同步关键段CS》   上一篇中使用关键段来解决经典的多线程同步互斥问题,由于关键段...
  • lien0906
  • lien0906
  • 2015年04月15日 16:09
  • 1284

VC++ 创建线程的三种方式以及如何进行选择

1. HANDLE WINAPI CreateThread( __in          LPSECURITY_ATTRIBUTES lpThreadAttributes, __in      ...
  • educast
  • educast
  • 2013年01月09日 16:31
  • 1561

java多线程之synchronized和锁对象

JDK1.5以后加入了concurrent包,主要是为了提高多线程的开发效率,此外还提供了很多支持并发的集合类(ConcurrentHashMap、CopyOnWriteArrayList) 1、既...
  • liuxiao723846
  • liuxiao723846
  • 2015年08月31日 17:15
  • 509
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC中如何得到一个线程的效率
举报原因:
原因补充:

(最多只允许输入30个字)