1

次のように、C winapi ライブラリを使用してユーザーのアイドル時間を取得できることを知っています。

LASTINPUTINFO lii = {sizeof(LASTINPUTINFO), 0};
GetLastInputInfo(&lii); //error handling ommitted, not the point here
int CurIdleTime = (getTickCount() - (lii.dwTime))/1000;

topこのコマンドはユーザーのアイドル時間を正しく表示するため、UNIX システムでも実行できます。

C でユーザーのアイドル時間を取得する簡単なマルチプラットフォームの方法はありますか? そうでない場合、OSに依存しないようにするために、どのライブラリがそれを行うのに役立ちますか?

4

1 に答える 1

1

標準 C にはtime.hがあり、関数にはtime とがありdifftimeます。これらを使用して、イベント間の以前の値を保存することにより、ユーザー入力間の時間を計算できます。

ここに例があります。(簡潔にするためにエラー チェックは削除されています)

void on_event() {
    static time_t old = 0;
    time_t new = time(NULL);
    if (old != 0) {
        double diff = difftime(new, old);
        if (diff != 0)
            printf("%g seconds idle\n", diff);
    }
    old = new;
}

実際にイベントを取得するには、プラットフォーム固有のコードが必要です。さまざまなライブラリがあり、すべてではないにしても、そのほとんどが既に行われています。 GTK+SDLは、用途の異なる C の一般的なライブラリです。C で Tkを使用する方法があり、さまざまなクロスプラットフォームのC++ ライブラリがあります。すでに 存在するC GUI ライブラリに関するいくつかの質問に注意することも役立つ場合があります。

于 2015-08-22T06:14:23.000 に答える