Поиск:

Ответ в темуСоздание новой темы Создание опроса
> синхронизация таймеров, синхронизация таймеров 
:(
    Опции темы
reider
Дата 18.11.2013, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 18.11.2013

Репутация: нет
Всего: нет



Доброго времени суток.
Подскажите кто знает как реализовать синхронизацию таймеров двух классов.
У меня есть два моих класса(cl1, cl2), и в каждом из них есть свой таймер, который запускаеться в конструкторе.

Код

class cl2;
class cl1 : public QWidget
{
........
QTimer *T1;
cl2 *Mycl2;
}

class cl2 : public QWidget
{
.......
QTimer *T2;
}

Еслть ли возможность их синхронизировать, в том смысле чтобы их старт происходил одновременно?
Заранее благодарен.
PM MAIL   Вверх
CompWorm
Дата 19.11.2013, 05:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Допеределыватель
***


Профиль
Группа: Участник Клуба
Сообщений: 1689
Регистрация: 6.12.2004
Где: /

Репутация: нет
Всего: 31



прям вот совсем одновременно?  smile 
- создай общий таймер снаружи и передай на него указатель в конструкторы этих классов.
в каждом классе далее можно подписать его сигнал на мембер слоты...

можно совсем компактно, тогда придется реализовать паттерн, правда затрудняюсь сказать точное название (таймер аля Singleton)
идея в том чтобы создать объект в памяти один раз, в базовом классе например, и наследовать его в двух твоих классах. какой наследник первым создается тот и инициализирует таймер для остальных. стартонуть таймер можно потом из любого наследника.

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

Это сообщение отредактировал(а) CompWorm - 19.11.2013, 06:10


--------------------
PM MAIL   Вверх
CompWorm
Дата 19.11.2013, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Допеределыватель
***


Профиль
Группа: Участник Клуба
Сообщений: 1689
Регистрация: 6.12.2004
Где: /

Репутация: нет
Всего: 31



примерно вот так я это представляю 

Код

#include <QCoreApplication>
#include <QTimer>
#include <QDebug>

template <class T>
class Singleton
{
public:
    static T& Instance()
    {
        static T _instance;
        return _instance;
    }
private:
    Singleton();
    ~Singleton();
    Singleton(const Singleton &);
    Singleton& operator=(const Singleton &);
};

class SingleTimerManager : public QObject
{
Q_OBJECT
public:
    SingleTimerManager()
    {
        mSingleTimer = &Singleton<QTimer>::Instance();
    }
    void start(int t){mSingleTimer->start(t);}
    void stop(){mSingleTimer->stop();}
protected:
    QTimer *mSingleTimer;
};

class A : public SingleTimerManager
{
Q_OBJECT
public:
    A(){QObject::connect(mSingleTimer, SIGNAL(timeout()), this, SLOT(trigger()));}
public slots:
    void trigger(){qDebug() << "[A] i was triggered by timer"; stop();}
};

class B : public SingleTimerManager
{
Q_OBJECT
public:
    B(){QObject::connect(mSingleTimer, SIGNAL(timeout()), this, SLOT(trigger()));}
public slots:
    void trigger(){qDebug() << "[B] i was triggered by timer";}
};

#include "main.moc"
int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);

    A *a = new A();
    B *b = new B();
    b->start(1000);

    return app.exec();
}





Добавлено через 7 минут и 52 секунды
можно старт/стоп сделать статическими и звать 
SingleTimerManager::start(1000);
SingleTimerManager::stop();
так консистентней 


--------------------
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0413 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.