检索用户空闲时间的多平台方式

multiplatform way to retrieve user idle time

我知道我可以使用 C winapi 库获取用户空闲时间,如下所示:

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

也可以在 UNIX 系统中执行此操作,因为 top 命令可以正确显示用户空闲时间。

是否有一种简单的多平台方式来获取 C 中的用户空闲时间?如果没有,哪些图书馆可以帮助我做到这一点,以免成为 OS-依赖者?

标准 C 有 time.h, in there are the functions timedifftime。这些可用于计算之间的时间 用户通过存储事件之间的先前值来输入。

这是一个例子。 (为简洁起见,删除了错误检查)

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+ and SDL are popular libraries for C with different uses. There are ways to use Tk with C, and there are various cross-platform C++ libraries. It may also be helpful to note some of the questions regarding C GUI libraries that already exist.