На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела *nix / gcc / Eclipse / Qt / wxWidgets / GTK+
  • При создании темы ОБЯЗАТЕЛЬНО указывайте версию тулкита / библиотеки / компилятора.
  • Перед тем как задать вопрос, сформулируйте его правильно, чтобы вас могли понять.
  • Нарушение Правил может повлечь наказание со стороны модераторов.


Полезные ссылки:
user posted image Boost по-русски
user posted image Qt по-русски
Модераторы: archimed7592
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> QThread
    Можно ли как узнать результат завершения потока и как его задать в самом потоке ?
      ExpandedWrap disabled
         class MyThread : public QThread
         {
         public:
             int result() const;
         protectes:
             void run();
             int m_result;
         };
         
         void MyThread::run()
         {
            // ...
            m_result = 5;
         }
         
         int MyThread::result() const
         {
            return m_result;
         }
      Сообщение отредактировано: archimed7592 -
        я думал что это уже реализовано у QThread :(

        З.Ы. Я наследуюсь от QThread как protected.
        Почему в секции signals нельзя использовать директиву using ?
          Цитата zss @
          З.Ы. Я наследуюсь от QThread как protected.
          Почему в секции signals нельзя использовать директиву using ?

          Потому что сигналы - это не такие же обычные ф-ции, как слоты. Ты не забывай, что в Qt своя metaobject система :).

          А разве есть какой-нибудь смысл наследоваться от QThread как protected? Я даже придумать не могу :).
            Цитата archimed7592 @
            А разве есть какой-нибудь смысл наследоваться от QThread как protected? Я даже придумать не могу

            чтоб закрыть все, и открыть только один метод (аля паттерн "Павлик Морозов" :))
              Ну а зачем? :)
              Используй тогда аггрегацию(has-a) вместо наследования(is-a) (аля паттерн Адаптер :lol:)...
              Сообщение отредактировано: archimed7592 -
                Цитата archimed7592 @
                Используй тогда аггрегацию(has-a) вместо наследования(is-a) (аля паттерн Адаптер )...

                а как ты себе это представляешь для QThread ?
                  Ммм... Не особо помню как устроен QThread, но, тем не менее:
                  ExpandedWrap disabled
                    class MyThread
                    {
                        QThread thread;
                    public:
                        MyThread()
                            : thread(...)
                        { }
                        int run()
                        {
                           ...
                           thread.run();
                           return ...
                        }
                    }
                    run чисто виртуальный метод - поэтому нельзя создать оюъект QThread в MyThread
                      ExpandedWrap disabled
                        class MyThread
                        {
                            class ThreadImpl : public QThread
                            {
                               void run() { ... }
                            };
                            ThreadImpl thread;
                        public:
                            MyThread()
                                : thread(...)
                            { }
                            int run()
                            {
                               ...
                               thread.run();
                               return ...
                            }
                        }
                        archimed7592, тогда от него нельзя наследоваться и верекрывать виртуальный run :)

                        мне нужно просто оставить 2 слота started & finished

                        Может не городить, а просто их вызвать ?
                        ExpandedWrap disabled
                          class MyClass : protected QThread {
                          public slots :
                              void started (void) { emit QThread::started();  }
                              void finished(void) { emit QThread::finished(); }
                          }
                          Цитата zss @
                          тогда от него нельзя наследоваться и верекрывать виртуальный run :)

                          Template Method.



                          Цитата zss @
                          Может не городить, а просто их вызвать ?

                          Так вызываются только сигналы... Слоты можно вызывать точно так же, как самые обыкновенные ф-ции.
                            Цитата archimed7592 @
                            Так вызываются только сигналы... Слоты можно вызывать точно так же, как самые обыкновенные ф-ции.

                            точно тогда так
                            ExpandedWrap disabled
                              class MyClass : protected QThread {
                              public slots :
                                  void started (void) { QThread::started();  }
                                  void finished(void) { QThread::finished(); }
                              }



                            Цитата archimed7592 @
                            Template Method.

                            что ты имеешь ввиду
                              Цитата zss @
                              что ты имеешь ввиду

                              ExpandedWrap disabled
                                class MyThread
                                {
                                    class ThreadImpl : public QThread
                                    {
                                       MyThread &parent;
                                       void run() { parent.run() }
                                    public:
                                        ThreadImpl(MyThread &parent) : QThread(...), parent(patent) { }
                                    };
                                    ThreadImpl thread;
                                public:
                                    MyThread()
                                        : thread(*this)
                                    { }
                                    int run()
                                    {
                                       return this->runImpl();
                                    }
                                private:
                                    virtual int runImpl() = 0;
                                }
                                Цитата archimed7592 @
                                MyThread()
                                : thread(*this)
                                { }

                                разве можно использовать this в конструкторе. Объект еще не создан и моя студия ругается на это...
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0399 ]   [ 16 queries used ]   [ Generated: 3.05.24, 16:04 GMT ]