none
C# API QueryPerformanceCounter 問題 RRS feed

  • 問題

  • API QueryPerformanceCounter 聽說跟時間有關 , 是真的嗎? 那如果是的話可以使用C#來呼叫他?
    2010年8月14日 上午 03:24

解答

  • using System;
    using System.Runtime.InteropServices;
    using System.ComponentModel;
    using System.Threading;
    
    namespace Win32
    {
      internal class HiPerfTimer
      {
        [DllImport("Kernel32.dll")]
        private static extern bool QueryPerformanceCounter(
          out long lpPerformanceCount);
    
        [DllImport("Kernel32.dll")]
        private static extern bool QueryPerformanceFrequency(
          out long lpFrequency);
    
        private long startTime, stopTime;
        private long freq;
    
        // Constructor
    
        public HiPerfTimer()
        {
          startTime = 0;
          stopTime = 0;
    
          if (QueryPerformanceFrequency(out freq) == false)
          {
            // high-performance counter not supported
    
            throw new Win32Exception();
          }
        }
    
        // Start the timer
    
        public void Start()
        {
          // lets do the waiting threads there work
    
          Thread.Sleep(0);
    
          QueryPerformanceCounter(out startTime);
        }
    
        // Stop the timer
    
        public void Stop()
        {
          QueryPerformanceCounter(out stopTime);
        }
    
        // Returns the duration of the timer (in seconds)
    
        public double Duration
        {
          get
          {
            return (double)(stopTime - startTime) / (double) freq;
          }
        }
      }
    }
    

    Cmf.Net (C) 2010
    • 已標示為解答 Lolota Lee 2010年8月23日 上午 02:43
    2010年8月14日 上午 03:34
  • 可以用來量測執行某個動作花掉多少時間

    • 已標示為解答 Lolota Lee 2010年8月23日 上午 02:43
    2010年8月14日 上午 04:06

所有回覆

  • using System;
    using System.Runtime.InteropServices;
    using System.ComponentModel;
    using System.Threading;
    
    namespace Win32
    {
      internal class HiPerfTimer
      {
        [DllImport("Kernel32.dll")]
        private static extern bool QueryPerformanceCounter(
          out long lpPerformanceCount);
    
        [DllImport("Kernel32.dll")]
        private static extern bool QueryPerformanceFrequency(
          out long lpFrequency);
    
        private long startTime, stopTime;
        private long freq;
    
        // Constructor
    
        public HiPerfTimer()
        {
          startTime = 0;
          stopTime = 0;
    
          if (QueryPerformanceFrequency(out freq) == false)
          {
            // high-performance counter not supported
    
            throw new Win32Exception();
          }
        }
    
        // Start the timer
    
        public void Start()
        {
          // lets do the waiting threads there work
    
          Thread.Sleep(0);
    
          QueryPerformanceCounter(out startTime);
        }
    
        // Stop the timer
    
        public void Stop()
        {
          QueryPerformanceCounter(out stopTime);
        }
    
        // Returns the duration of the timer (in seconds)
    
        public double Duration
        {
          get
          {
            return (double)(stopTime - startTime) / (double) freq;
          }
        }
      }
    }
    

    Cmf.Net (C) 2010
    • 已標示為解答 Lolota Lee 2010年8月23日 上午 02:43
    2010年8月14日 上午 03:34
  • 這是怎樣阿= =,怎突然給段程式碼,你都還沒說明就這樣,太快了吧,請 cmf 大大說明一下 API QueryPerformanceCounter 是啥東東!
    有問題是好的開始,但是繼續錯誤下去則是失敗~
    2010年8月14日 上午 03:36
  • 可以用來量測執行某個動作花掉多少時間

    • 已標示為解答 Lolota Lee 2010年8月23日 上午 02:43
    2010年8月14日 上午 04:06
  • 可以 可以用來量測執行某個動作花掉多少時間

    那麼...

    可以 調整某動作的執行時間?


    有問題是好的開始,但是繼續錯誤下去則是失敗~
    2010年8月14日 上午 04:36
  • 可以 可以用來量測執行某個動作花掉多少時間

    那麼...

    可以 調整某動作的執行時間?


    有問題是好的開始,但是繼續錯誤下去則是失敗~


    高精度高的計時器,跟調整某動作執行時間無關

    另外請注意一點,這邊有好幾位都是我尊敬的前輩,他們並沒有義務要做回答,以 cmf 前輩貼出來的程式碼而言,您應該去了解為什麼 cmf 前輩為什麼要貼這些程式碼,程式碼是在做什麼的,然後對程式碼有疑問再提出來,而不是要求 cmf 前輩做詳細說明


    歡迎參觀我的Blog.NET菜鳥自救會

    2010年8月14日 上午 05:24
    版主
  • 你為啥不先看看 MSDN 上關於此函數的說明再提出你的問題呢?

    這樣你也不會問出不知道你自己要問甚麼的問題。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年8月14日 上午 09:55
  • 小弟會改進的,請多包含。

     

    真是抱歉...


    有問題是好的開始,但是繼續錯誤下去則是失敗~
    2010年8月15日 上午 02:52