2015-08-21 19 views
1

Я знаю, что может получить пользовательское время простоя с помощью библиотеки 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? если нет, то какие библиотеки могут помочь мне сделать это, чтобы не быть зависимым от ОС?

ответ

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 с различными видами использования. Есть способы использовать Tk with C, и есть различные кросс-платформенные C++ libraries. Также может быть полезно отметить некоторые из вопросов, касающихся библиотек C GUI, которые alreadyexist.

+0

Не отвечает на вопрос, поскольку он обеспечивает только способ ввода пользователя * входов * в режиме ожидания, а не от того, переместил ли он мышь/понизил громкость/любой другой вход, который может обрабатывать ОС – Magix

+0

@MagixKiller Глядя на него снова, что пример пытался показать, не было очевидным, он был заменен тем, который, надеюсь, будет более полезным. – kdhp

+0

Ну, проблема остается, как вы можете заставить ОС вызывать * on_event() *, когда событие запускается мультиплатформенным способом? это тоже часть вопроса, спасибо за ответ в любом случае – Magix