/** 結果…ヴっちゃけif文の方が速かったです。(爆) よってTaskProcessingTypeJumpTableは使っちゃダメ! でも、もしかしたら、if文じゃないほうが高速な場合のPCもあるかもしれない。 DxLibFanの一括ダウンロードルームにも ソース(VC++6.0プロジェクトファイル付き)と実行ファイルあります。 なぉ、dKingyoUtility.hは上記のダウンロードルームからダウンロードして下さい。 この結果はデバックビルドで行ったほう //************************* これから関数のポインタ(チェンジタスク用)と if文によるチェンジタスクの試合をはじめます。 テスト回数=10,ループ回数=1000000 関数のポインタ(チェンジタスク用)をテストします。 ChengeTaskを実行する条件はカウンタが255の時です。BYTE counter==255 (*t[(counter==COUNTER_NUM)])(); 0回目=94msec 1回目=83msec 2回目=107msec 3回目=92msec 4回目=93msec 5回目=84msec 6回目=89msec 7回目=82msec 8回目=90msec 9回目=193msec 平均は100mesc aが呼び出された回数9960938,bが呼び出された回数=39062 これからif文による速度テストを行います。 チェンジタスクする条件はカウンタが255の時です。if(BYTE counter==255) if(counter==COUNTER_NUM) b(); else a(); 0回目=82msec 1回目=94msec 2回目=80msec 3回目=85msec 4回目=79msec 5回目=87msec 6回目=80msec 7回目=80msec 8回目=86msec 9回目=85msec 平均は83mesc aが呼び出された回数9960938,bが呼び出された回数=39062 if(counter==COUNTER_NUM) b(); 0回目=25msec 1回目=16msec 2回目=17msec 3回目=16msec 4回目=16msec 5回目=16msec 6回目=17msec 7回目=16msec 8回目=17msec 9回目=22msec 平均は17mesc aが呼び出された回数0,bが呼び出された回数=39062 //***************END************* */ #include "dKingyoUtility.h" //#include "test.h" #pragma comment(lib,"winmm") #define LOOP_NUM 1000000//ループ回数 #define TEST_NUM 10//テスト回数 #define LOGNAME "tasktypefp_vs_ifchengetask.txt" #define SLEEPTIME 4000 #define COUNTER_NUM 255 //呼び出されたときインクリメント static int a_pp=0; static int b_pp=0; void a(){ a_pp++; //printf("a "); } void b(){ b_pp++; //printf("b "); } void (*t[])(void)={ a,b,NULL }; int print(char *str,...){ static char s[1024]; static va_list VaList ; va_start( VaList , str ) ; vsprintf( s , str , VaList ) ; va_end( VaList ) ; dAddLog(LOGNAME,s); printf(s); return 0; } void main(){ print("//*************************\n"); print("これから関数のポインタ(チェンジタスク用)と\nif文によるチェンジタスクの試合をはじめます。\n"); print("テスト回数=%d,ループ回数=%d\n\n",TEST_NUM,LOOP_NUM); print("関数のポインタ(チェンジタスク用)をテストします。\n"); print("ChengeTaskを実行する条件はカウンタが%dの時です。BYTE counter==%d\n",COUNTER_NUM,COUNTER_NUM); print("(*t[(counter==COUNTER_NUM)])();\n"); int i,j,q=0; DWORD timebuff[TEST_NUM],tt=0; BYTE counter=0; for(i=0;i