crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Таймер в консольном приложении. Базы данных.
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
smirnoffx Дата 11.5.2011, 16:05
  Всем спасибо. Заработало так:

main.cpp:
#include <QtCore/QCoreApplication>
#include <modul.h>

#include <iostream>

void Tmr::shot()
{
 std::cout << "display test string";
}

void Tmr::atimer(int msec)
{
   QTimer::singleShot(msec, this, SLOT(shot()));
}

int main(int argc, char *argv[])
{
   QCoreApplication a(argc, argv);

   Tmr tobj;
   tobj.atimer(10000);

   return a.exec();
}


modul.h:
#include <QtCore/QCoreApplication>
#include <modul.h>

#include <iostream>

void Tmr::shot()
{
 std::cout << "display test string";
}

void Tmr::atimer(int msec)
{
   QTimer::singleShot(msec, this, SLOT(shot()));
}

int main(int argc, char *argv[])
{
   QCoreApplication a(argc, argv);

   Tmr tobj;
   tobj.atimer(10000);

   return a.exec();
}


Думаю у меня скоро еще возникнут вопросы )))

Точнее так (прошу прощения за *.h файл):

main.cpp:
#include <QtCore/QCoreApplication>
#include <modul.h>

#include <iostream>

void Tmr::shot()
{
 std::cout << "display test string";
}

void Tmr::atimer(int msec)
{
   QTimer::singleShot(msec, this, SLOT(shot()));
}

int main(int argc, char *argv[])
{
   QCoreApplication a(argc, argv);

   Tmr tobj;
   tobj.atimer(10000);

   return a.exec();
}


modul.h:
#ifndef MODUL_H
#define MODUL_H

#include <QObject>
#include <QTimer>

class Tmr : public QObject
{
   Q_OBJECT
public:
   Tmr()
   {
   }

public slots:
   void shot();
   void atimer(int msec);
};

#endif // MODUL_H


Думаю у меня скоро еще возникнут вопросы )))
Алексей1153 Дата 10.5.2011, 22:44
  smirnoffx,

Цитата(MoPDoBoPoT @ 11.5.2011, 0:56) *
2. Привыкай сразу для классов собственные .cpp и .h файлы создавать


выполни данную рекомендацию :)
smirnoffx Дата 10.5.2011, 22:25
 
Цитата(MoPDoBoPoT @ 10.5.2011, 22:56) *
1. Для использования сигнал-слотов необходимо наследоваться от QObject, а также нужен макрос Q_OBJECT
2. Привыкай сразу для классов собственные .cpp и .h файлы создавать

Вот так все работает:
#include <QtCore/QCoreApplication>
#include <QTimer>
#include <QObject>
#include <iostream>

class Tmr : public QObject
{
  Q_OBJECT
public:
  Tmr()
  {
      QTimer::singleShot(2000, this, SLOT(shot()));
  }

public slots:
  void shot();
};

void Tmr::shot()
{
 std::cout << "display test string";
}

int main(int argc, char *argv[])
{
   QCoreApplication a(argc, argv);

   //Tmr s;
   //s.shot();

   return a.exec();
}


Но стоит в main создать объект класса
Tmr s;
s.shot();


как летят ошибки:
Цитата
D:/modul/modul-build-desktop/debug/main.o:-1: In function `Tmr':
D:\modul\modul-build-desktop/../modul/main.cpp:11: ошибка: undefined reference to `vtable for Tmr'
D:/modul/modul-build-desktop/debug/main.o:-1: In function `~Tmr':
D:\modul\modul-build-desktop/../modul/main.cpp:7: ошибка: undefined reference to `vtable for Tmr'
:-1: ошибка: collect2: ld returned 1 exit status


В чем проблема?

MoPDoBoPoT Дата 10.5.2011, 21:56
  1. Для использования сигнал-слотов необходимо наследоваться от QObject, а также нужен макрос Q_OBJECT
2. Привыкай сразу для классов собственные .cpp и .h файлы создавать
smirnoffx Дата 10.5.2011, 21:12
  А почему так не работает:
#include <QtCore/QCoreApplication>
#include <QTimer>
#include <iostream>

class tmr
{

public:
   void shot()
   {
      QTimer::singleShot(2000, , SLOT(f()));
   }

public slots:
   void f();

};


void tmr::f()
{
  std::cout << "display test string";
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    tmr s;
    s.shot();

    return a.exec();
}


Не может к слоту подсоединиться...
Алексей1153 Дата 10.5.2011, 20:57
  один из вариантов - QThread . В потоке делать задержки нужного интервала и вызывать нужные функции.

у QThread есть таймеры с разной точностью

void QThread::usleep ( unsigned long usecs ) [static protected]
void QThread::msleep ( unsigned long msecs ) [static protected]
void QThread::sleep ( unsigned long secs ) [static protected]

Если не запускать новый поток, то воспользоваться напрямую помешают модификаторы protected, поэтому произведи свой класс и оттуда сделай public транплин
smirnoffx Дата 10.5.2011, 20:44
  Доброго всем времени суток.

Есть задача реализовать выгрузку неких данных в БД MSSQL по определенному интервалу. Реализация должна без проблем запускаться в linux и windows.

Для этого дабы не писать gui хочу реализовать консольное приложение.
Встал вопрос как реализовать таймер и функцию-обработчик события?

QTimer::singleShot(2000, &a, SLOT(f()));
не катит. Пишет что
No such slot QCoreApplication::f() in ...

Необходимо реализовать класс унаследованный от QCoreApplication в котором определить слот и таймер?

Как реализовать таймер?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 14.12.2017, 21:43