2016-05-19 1 views
-2

На Ubuntu я разрабатываю приложение на C++ с Qt. Я использую QTimer, но он недостаточно точен. Я ищу что-то с разрешением лучше, чем миллисекунда. Есть ли способ сделать это?Субмиллисекундный таймер в Qt

мой код:

temps= 0; 
dataTimer = new QTimer(); 
connect(dataTimer, SIGNAL(timeout()), this, SLOT(simuler())); 
dataTimer->start(1); 
+2

Как насчет 'usleep' в рабочем потоке? Или посмотрите [Таймеры POSIX] (http://man7.org/linux/man-pages/man2/timer_create.2.html). –

+0

'QElapsedTimer' позволяет, к сожалению, очень высокоточное время, но не для Linux. Может быть сторонний таймер, который будет делать то, что вам нужно. –

+0

@JonHarper Дайте мне пример – BkarimCe

ответ

3

Я считаю, что вы не надежно получить задержку суб-миллисекунды для полезных действий на практике (рабочий стол Linux является не в режиме реального времени система). Возможно, компиляция собственного ядра с CONFIG_PREEMPT может немного помочь! Но это сильное ограничение (и для его преодоления нет никаких программных трюков).

Как Karsten Koop комментировали, вы можете использовать потоки или таймеры POSIX. Смотрите также time(7)

Как Drop прокомментировал, при компиляции в режиме C++ 11, рассмотреть вопрос об использовании <chrono> (это более или менее оберточная clock_gettime в C++ 11, соответствующем образом, ИЕ вы будете в состоянии мер небольшие задержки).

Конкретное решения Linux может быть использование timerfd_create(2) и опрашивать, что FD в главном цикле Qt (с использованием QSocketNotifier)

Если вы просто хотите мер (не акта) время с подп точности до миллисекунды , просто используйте clock_gettime(2)

Обратите внимание, что несколько операций Qt достаточно сложны, чтобы потребовалось больше миллисекунды для запуска. И человек не способен воспринимать (например, видеть на экране) субмиллисекундные задержки. Экран обновляется на частоте 60 Гц (или 144 Гц для некоторых дорогих экранов), поэтому вы не можете видеть такие небольшие задержки на нем.

Если вы не знакомы с программированием Linux, потребуется время, чтобы прочитать Advanced Linux Programming в того из гиперссылкой материала выше (ALP книга старше timerfd_create)

+0

Приведу, пожалуйста, пример этого мира Hellow! – BkarimCe

+0

У вас нет времени, чтобы сделать пример: найдите несколько часов, чтобы прочитать материал, который я связал и экспериментировал сам. –

+0

Дайте мне залог – BkarimCe