【问题标题】:multiplatform way to retrieve user idle time检索用户空闲时间的多平台方法
【发布时间】:2015-08-21 21:56:58
【问题描述】:

我知道我可以使用 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 中获得用户空闲时间?如果没有,哪些库可以帮助我做到这一点,以免依赖于操作系统?

【问题讨论】:

    标签: c user-input multiplatform idle-timer


    【解决方案1】:

    标准C有time.h,里面有函数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+SDL 是流行的 C 库,具有不同的用途。 Tk with C有多种使用方式,还有各种跨平台的C++ libraries。注意alreadyexist 提出的有关 C GUI 库的一些问题也可能会有所帮助。

    【讨论】:

    • 不回答这个问题,因为它只提供了一种让用户 input 空闲时间的方法,而不是他是否移动了鼠标/降低了音量/任何其他输入操作系统可以处理
    • @MagixKiller 再看一遍示例试图显示的内容并不明显,它已被替换为希望更有帮助的示例。
    • 还有一个问题,当事件以多平台方式触发时,如何让操作系统调用 on_event()?这也是问题的一部分,谢谢您的回答
    猜你喜欢
    • 2013-03-28
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 2010-10-29
    • 2014-07-12
    • 2019-06-10
    相关资源
    最近更新 更多