![]()  | 
		
			
  | 	
	
	
		
		|||||||
| 論壇說明 | 
| 
				歡迎您來到『史萊姆論壇』  ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』  | 
		
     
![]()  | 
    
    
| 
         | 
    主題工具 | 顯示模式 | 
| 
			
			 | 
		#1 | 
| 
			
			 管理版主 
			![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]()  | 
	
	
	
		
		
			
			 這裡用到 WinAPI 函數 
		
		
		
	以下是 VB 宣告 Public Declare Function GetTickCount Lib "kernel32" () As Long 作用是 "計算Windows從啟動後所運行的總時間" 單位是1豪秒 (1ms) 1s = 1000ms = 1000000μs = 1000000000ns 接著是實作 假設我們要得知 S() 函數(指令、運算) 所要花費的時間 Function ReviseTimerTickNum(Optional ByRef ReviseTimerTickMilliSec As Long) As Long Dim LongTick As Long LongTick = GetTickCount Do Call S() DoEvents ReviseTimerTickNum = ReviseTimerTickNum + 1 ReviseTimerTickMilliSec = GetTickCount - LongTick Loop Until ReviseTimerTickMilliSec > 0 End Function '得知做多少次(S+DoEvents)會多 ReviseTimerTickMilliSec 豪秒 '得知多 ReviseTimerTickMilliSec 豪秒需做ReviseTimerTickNum次 注意 ReviseTimerTickMilliSec 通常會大於 1 (從1.xx~x.xx) 至於這個結果能做什麼? ...待續 ^^  | 
| 
		 | 
	
	
	
		
	
	 
		送花文章: 2058,
		
			
		 
	
 
	
		
	
				 
		
		
		
		
		
		
			
		
		
		
		
		
			
					
						
					
			
		
		
		
		
		
			
				
			
		
		
		
	 | 
| 
			
			 | 
		#2 (permalink) | 
| 
			
			 管理版主 
			![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]()  | 
	
	
	
		
		
			
			 在講應用前再補充一些 
		
		
		
	'GetTickCount() 'Windows NT 3.5 及更高版本,精度為 10ms 'Windows NT 3.1 及更高版本,精度為 16ms 'Windows 95 及更高版本,精度為 55ms 'timeGetTime() '精度約1ms , 此式適用於大多數應用場合 Public Declare Function timeGetTime Lib "winmm.dll" () As Long '1s = 1000ms = 1000000μs = 1000000000ns 那微秒級數的呢? '得到處理器使用的主機板內部計時器的時鐘頻率 Private Declare Function QueryPerformanceFrequency Lib "kernel32" ( _ lpFrequency As Currency) As Long 'LARGE_INTEGER Private Declare Function QueryPerformanceCounter Lib "kernel32" ( _ lpPerformanceCount As Currency) As Long 'LARGE_INTEGER 原本QueryPerformanceFrequency 和 QueryPerformanceCounter 的參數之資料型態是 LARGE_INTEGER Type LARGE_INTEGER '佔 8 byte lowpart As Long highpart As Long End Type 因為要簡省換算是改成同樣是 8byte 的 Currency(for VB,C 的話可用 LONGLONG) ================= timeGetTime 的實例同第一例子 所以這裡示範 高精度(微秒) if not GetTickCount_MicroSec(True) then MsgBox "不支持高精度計數器!" else Do Call S() DoEvents ReviseTimerTickMicroSec = GetTickCount_MicroSec Loop Until ReviseTimerTickMicroSec > 1000 '1000us=1ms endif ..... Public Function GetTickCount_MicroSec(Optional ByRef blnCountStart As Boolean) Static TickCount1 As Currency Dim TickCount2 As Currency Dim Freq As Currency If QueryPerformanceFrequency(Freq) Then If blnCountStart Then QueryPerformanceCounter TickCount1 GetTickCount_MicroSec = True Else QueryPerformanceCounter TickCount2 GetTickCount_MicroSec = (Abs(TickCount2 - TickCount1) / Freq) * 1000000 '10^6 End If Else 'MsgBox "不支持高精度計數器!" GetTickCount_MicroSec = False End If End Function  | 
| 
		 | 
	
	
	
		
	
	 
		送花文章: 2058,
		
			
		 
	
 
	
		
	
				 
		
		
		
		
		
		
			
		
		
		
		
		
		
		
		
		
			
				
						
				
			
		
		
		
	 |