Russian Qt Forum

Qt => Общие вопросы => Тема начата: Иван4444 от Октябрь 19, 2010, 17:59



Название: Выполнение с задержкой
Отправлено: Иван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 минут
   }

}


Название: Re: Выполнение с задержкой
Отправлено: Иван4444 от Октябрь 19, 2010, 18:12
Так же можно предположить что
class A и B наследуется от QThread

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

В таком случае, если мы вызовем sleep() в фун-ии A::init() , то пока А спит, сможем ли мы вызвать какую либо функцию класса, через класс С ? Этот вызов попадет в "очередь"? (вообще, есть ли эта очередь?)


Название: Re: Выполнение с задержкой
Отправлено: BRE от Октябрь 19, 2010, 18:13
Воспользоваться таймером (например QTimer).


Название: Re: Выполнение с задержкой
Отправлено: Иван4444 от Октябрь 19, 2010, 18:14
как это будет выглядеть в коде? (если несложно)


Название: Re: Выполнение с задержкой
Отправлено: BRE от Октябрь 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() );
}
 


Название: Re: Выполнение с задержкой
Отправлено: Иван4444 от Октябрь 21, 2010, 11:20
Огромнейшее спасибо!