absmiddle Windows 95 背景測試


[解說] EightCloud.bbs@firebird (嵐雲): /**************** 背景 run test 時, 所 key in 的字, 開始 **************/ 為什麼要用別人的程式? 為什麼不自己寫程式測試? 在 key in 這篇文章時, (現在), 背景正在執行我自己寫的測試程式 ok 到這列為止. /**************** 背景 run test 時, 所 key in 的字, 結束 **************/ D:\test\test\WinDebug>test 花費時間= 84.576 秒 loop 的次數為 0000000000000000000000000000000000000000000000000000000000000002620856 *** test 接收一個參數, 稱做為 p 好了, 若沒有輸入任何參數, 則 p 為 最大值 (80位數個9) test 主要為一個 while (1) 的程式, 當 loop 的次數為 p 時, 自動 停止, 或是 當使用者按下一個鍵的時候停止. 前面那個結果, 首先, 我先執行 test 程式, 然後 切換到記事本, keyin 四列文字, 在回到 test 程式, 按下一個鍵, 結果花了 84.576 秒, loop 次數為 2620856. (ps, 原本是印出 80 位數, 我把前 10 個零去掉.) 下面這個結果, 則是我在 test 參數加上 2620856, 也就是上個程式 所執行的 loop 數, D:\test\test\WinDebug>test 2620856 花費時間= 79.110 秒 loop 的次數為 0000000000000000000000000000000000000000000000000000000000000002620856 則所花時間為 79.110 秒. 結果是, 差不到 6 秒鐘. 在 NT 下花的時間: D:\test\test\windebug>test 2620856 花費時間= 77.802 秒 loop 的次數為 0000000000000000000000000000000000000000000000000000000000000002620856 在 NT 下背景花的時間: (還是打前面幾列的字, 不過由於第這次打, 沒有打錯字, 也就是實際上 keyin 的數目比較少, 情況不能說完全一樣. 而且 win95 輸入法比較花俏, 實際所佔的 cpu 時間會比較多, 這堨u是順便做個參考) D:\TEST\TEST\WINDEBUG>test 2620856 花費時間= 78.823 秒 loop 的次數為 0000000000000000000000000000000000000000000000000000000000000002620856 哇! 差一秒鐘多一點! 不過在 keyin 時, 有受到 delay 的感覺, 而在 win95 沒有. 大概我 nt 堛犒鶣e priority 沒有設高很多. 這個程式的特性: 在測試時, 沒有輸出任何字元, 盡量避免使用到 win95 的 gdi16, (就算用 console 文字輸出, 還是要用到 gdi 在 dos box "畫出" 字元, 程式本身沒呼叫到 gdi, 系統媮椄O要用到) system call (win api) 很少. 程式很小, 也就是不會有 paging 的動做, 不會用到 file system, 不會用到 cache, 當純的看 win95 scheduling 的結果. 唉! 老師要我做的工作還沒做, 自己要寫的程式還沒寫, 這禮拜要 present 的 paper 還沒看, 在這媦g這個無聊的程式.. 唉! 希望老師不要看到 .... 下面為我寫的程式: #include <windows.h> #include <stdio.h> #define DIGIT 80 char loop_counts[DIGIT+1]; char finish_counts[DIGIT]; char threadover=0; DWORD testThread(); void main(int argc, char **argv) { HANDLE h_thread_test,h_thread_climan; DWORD thread_id; char flag; for (int i=0; i<DIGIT; i++) { loop_counts[i]='0'; finish_counts[i]='0'; } if (argc==2) { int x=strlen(argv[1]); for (i=0; i<x; i++) { finish_counts[x-i-1]=argv[1][i]; } } h_thread_test=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)testThread, //(LPVOID) 0,0,&thread_id); getchar(); threadover=1; WaitForSingleObject(h_thread_test,0xffffffff); } DWORD testThread() { DWORD start_count=GetTickCount(); char compare_equal; char no_use[DIGIT+1]; char no_use1; int i; while (1) { loop_counts[0]++; compare_equal=1; for (i=0; i<DIGIT; i++) { if (loop_counts[i]=='9'+1) { loop_counts[i+1]++; loop_counts[i]='0'; } else { no_use[i+1]++; no_use[i]=0; } if (loop_counts[i]!=finish_counts[i]) compare_equal=0; else no_use1=0; } if (compare_equal==1 || threadover==1) break; } printf("花費時間= %10.3f 秒 \n", ((float)(GetTickCount()-start_count))/1000); printf("loop 的次數為 \n"); for (i=79; i>=0; i--) putchar(loop_counts[i]); ExitProcess(1); return 0; }
上一層目錄