Название: QTimer и поток [решено] Отправлено: Bhted от Январь 27, 2015, 15:15 Есть такой код:
Код: class Indicator : public QObject Код: Indicator::Indicator() В главном окне приложения есть такое: Код: MainWindow::MainWindow(QWidget *parent) : Если во время работы Indicator::onDraw() (где-то внутри doSomething()) нажать кнопку pushButton, то у нас вызовется слот onStart()? И если да, то таймер перезапустится? И если эти предположения верны, то как избежать этого? Название: Re: QTimer и поток Отправлено: gil9red от Январь 27, 2015, 16:32 Вам не нужно перезапускать его, если он запущен?
проверяйте, тогда, метод isActive() (http://qt-project.org/doc/qt-4.8/qtimer.html#active-prop) Название: Re: QTimer и поток Отправлено: Bhted от Январь 27, 2015, 16:48 Я хочу чтобы было так: если во время работы таймера где-то внутри doSomething() произойдёт событие и будет вызвана функция Indicator::start(), то выполнение кода этой функции было бы отложено до тех пор, пока мы не выйдем из Indicator::onDraw(). В общем, что-то вроде критической секции, которую вроде можно было бы применить, но таймер же не создаёт отдельного потока для onDraw().
Название: Re: QTimer и поток Отправлено: Igors от Январь 28, 2015, 08:13 Если во время работы Indicator::onDraw() (где-то внутри doSomething()) нажать кнопку pushButton, то у нас вызовется слот onStart()? И если да, то таймер перезапустится? Тут нечего избегать. onDraw завершится, приложение выйдет в цикл событий и извлечет нажатие на pushButton - только тогда вызовется onStart. Проблема только если Вы сами (по своей инициативе) хотите получать события в теле onDraw вызывая qApp->processEvents, но Вы же этого не делаетеИ если эти предположения верны, то как избежать этого? Название: Re: QTimer и поток Отправлено: Bhted от Январь 28, 2015, 09:52 Цитировать Проблема только если Вы сами (по своей инициативе) хотите получать события в теле onDraw вызывая qApp->processEvents О, я так и подумал, когда вызывал processEvents. Спасибо! |