OS起動からのティックカウント(20msec単位の経過時間)を返します。

構文

unsigned int GetTickCount(void);

パラメータ

 なし

戻り値

 OS起動からのティックカウントを返します。
 ティックカウントは、20msecごとに1ずつ増加します。例えば、1秒間に50増加します。

解説

 OS起動からのティックカウントは、0から始まって20msecごとに0xFFFFFFFF(unsigned int型の最大値)まで1ずつ増加し、0xFFFFFFFFの次は0に回り込みます。
 0に回り込んだ場合でも、現在のティックカウントからunsigned int型で保持した過去のティックカウントを減算することにより、最大0xFFFFFFFFまでの経過時間を20msec単位で正しく計算できます。

(注意)

  • ティックカウントはOSを再起動したときに0に初期化されるため、日付や時刻に基づく経過日数や経過時間の計算には適しません。それらを計算する場合はGetDate関数GetTime関数を使用してください。

必要条件

ヘッダファイル:
lib.h
ライブラリファイル:
libSTARTUPOPH5000.a

サンプル

#include <stdio.h>
#include "lib.h"

void main(void)
{
    unsigned int startTick;
    int event;
    int elapsedSeconds;
    int prev_elapsedSeconds;

    while(1){
        printf("\n Press [ENT] to start\n");
        while(1){
            if (kbhit()){
                if (getchar() == ENT_KEY){
                    break;
                }
            }
            Idle();
        }
        printf(" Press [F1] within 10\n seconds.\n\n");
        event = FALSE;
        prev_elapsedSeconds = -1;

        startTick = GetTickCount();
        while(GetTickCount() - startTick < 10000/20){ // Wait for 10 seconds
            if (kbhit()){
                if (getchar() == F1_KEY){
                    event = TRUE;
                    break;
                }
            }
            elapsedSeconds = (GetTickCount() - startTick) / 5; // 5 ticks = 0.1 secconds
            if (elapsedSeconds != prev_elapsedSeconds ){
                printf(" Elapsed:%2d.%d\r", elapsedSeconds/10, elapsedSeconds%10);
                prev_elapsedSeconds = elapsedSeconds;
            }
            Idle();
        }

        if (event){
            printf(" Good!        \r\n");
        }else{
            printf(" Timeout!     \r\n");
        }
    }
}

最終更新日:2021/06/16