2012-02-13 4 views
0

Я создаю приложение для платформы Linux в C с графическим интерфейсом GTK + 2. Мне нужно, чтобы на экране отображались часы реального времени, отображающие HH: MM: SS (только нужно быть точным для второго), а затем запускать различные функции в определенное время, введенное пользователем в поле GTK_ENTRY.Лучший способ обработки часов реального времени?

Я изучил наилучший способ сделать это и нашел похожие вопросы, на которые люди ответили, чтобы использовать потоки GThread для контроля времени, но я не смог найти никаких особенностей.

Могу ли я отправить функцию, содержащую бесконечный цикл, постоянно проверяющий время и время на поток? Каким-то образом это не кажется правильным, или лучший способ справиться с этим.

Я бы очень признателен за любую информацию, которую может предложить любой человек, или любое направление в отношении ресурсов, которые могут ответить на этот вопрос.

Спасибо!

+0

Вы должны знать, что таймеры, подобные этому, широко освещаются, поскольку одна из причин, по которой большинство современных программ Linux не подходит для устройств с малой мощностью, таких как планшеты ... –

+0

Исходя из фона с объективом c и iOS, я конечно, понимаете, что вы говорите, и что это не самый элегантный и эффективный способ делать вещи. Но этот проект предназначен для очень специфического встроенного устройства с сенсорным экраном в очень специфической настройке. Это означает, что мои руки несколько привязаны к вариантам, но также означает, что мне действительно не нужно беспокоиться о том, что он используется в универсальном смысле. Однако, если у кого-то есть более элегантное решение, рекомендуемое, я полностью готов к предложениям. – DrRocket

+0

Хорошо, это имеет смысл. Я просто хотел предупредить вас о том, чтобы положить ненужные таймеры в приложения общего назначения. –

ответ

0

Просто добавьте обработчик тайм-аута glib, используя g_timeout_add(). Если вы используете период, скажем, полсекунды, вы должны быть в порядке. В коде обработчика выполните необходимые действия, чтобы обновить отображаемое время. Это может быть так же просто, как форматирование некоторого текста для GtkLabel.

Конечно, я не рекомендую использовать «тиканье» обратных вызовов тайм-аута в качестве реального источника синхронизации, вы должны использовать обычный API: s, чтобы узнать, какое время оно находится в каждом обратном вызове.

+0

Это определенно похоже на то, что я ищу, и намного проще, чем общаться с потоками! Я попробую это сегодня днем. Благодаря! – DrRocket

+0

Обязательно прочтите документацию об этих функциях. Они основаны на монотонных часах, а не на часах реального времени. http://developer.gnome.org/glib/stable/glib-Date-and-Time-Functions.html#g-get-monotonic-time – Fred

+0

@Fred: Это не имеет значения, если OP следует советам вызывать 'clock_gettime' или аналогичные, а не пытаться поддерживать время, основанное на подсчете событий таймера. –

Смежные вопросы