Russian Qt Forum
Октябрь 03, 2024, 16:19 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Выполнение с задержкой  (Прочитано 2963 раз)
Иван4444
Гость
« : Октябрь 19, 2010, 17:59 »

Всем доброго дня!
Вопрос: можно ли средствами Qt выполнить запрос через определенный промежуток времени?

Представим что есть

Код:
class B
{...}

class A
{
 void  init();
  B *pB;
}

void A::init()
{
bool result = SmthFunc(); // функция что то делает и возвращает false/true

   if(result)
   {
     pB->ToDo(); // выполнить функцию через 10 минут
   }
   else
   {
     pB->ToDo(); // но тут выполнить эту функцию через 60 минут
   }

}
Записан
Иван4444
Гость
« Ответ #1 : Октябрь 19, 2010, 18:12 »

Так же можно предположить что
class A и B наследуется от QThread

добавим еще класс C
Код:
class С : public QThread
{
  A *pA;
}

В таком случае, если мы вызовем sleep() в фун-ии A::init() , то пока А спит, сможем ли мы вызвать какую либо функцию класса, через класс С ? Этот вызов попадет в "очередь"? (вообще, есть ли эта очередь?)
Записан
BRE
Гость
« Ответ #2 : Октябрь 19, 2010, 18:13 »

Воспользоваться таймером (например QTimer).
Записан
Иван4444
Гость
« Ответ #3 : Октябрь 19, 2010, 18:14 »

как это будет выглядеть в коде? (если несложно)
Записан
BRE
Гость
« Ответ #4 : Октябрь 19, 2010, 18:22 »

Код
C++ (Qt)
void A::init()
{
QTimer *timer = new QTimer( this );
timer->setSingleShot( true );
connect( timer, SIGNAL( timeout() ), pB, SLOT( ToDo() ) );
 
bool result = SmthFunc(); // функция что то делает и возвращает false/true
timer->start( result? (10 * 1000 * 60) : (60 * 1000* 60) );
}
 

или еще проще:
Код
C++ (Qt)
void A::init()
{
bool result = SmthFunc(); // функция что то делает и возвращает false/true
QTimer::singleShot(  result? (10 * 1000 * 60) : (60 * 1000* 60), pB, SLOT( ToDo() );
}
 
« Последнее редактирование: Октябрь 19, 2010, 18:27 от BRE » Записан
Иван4444
Гость
« Ответ #5 : Октябрь 21, 2010, 11:20 »

Огромнейшее спасибо!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.201 секунд. Запросов: 20.