Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.133.121.160] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Можно ли как узнать результат завершения потока и как его задать в самом потоке ?
|
Сообщ.
#2
,
|
|
|
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; } |
Сообщ.
#3
,
|
|
|
я думал что это уже реализовано у QThread
З.Ы. Я наследуюсь от QThread как protected. Почему в секции signals нельзя использовать директиву using ? |
Сообщ.
#4
,
|
|
|
Цитата zss @ З.Ы. Я наследуюсь от QThread как protected. Почему в секции signals нельзя использовать директиву using ? Потому что сигналы - это не такие же обычные ф-ции, как слоты. Ты не забывай, что в Qt своя metaobject система . А разве есть какой-нибудь смысл наследоваться от QThread как protected? Я даже придумать не могу . |
Сообщ.
#5
,
|
|
|
Цитата archimed7592 @ А разве есть какой-нибудь смысл наследоваться от QThread как protected? Я даже придумать не могу чтоб закрыть все, и открыть только один метод (аля паттерн "Павлик Морозов" ) |
Сообщ.
#6
,
|
|
|
Ну а зачем?
Используй тогда аггрегацию(has-a) вместо наследования(is-a) (аля паттерн Адаптер )... |
Сообщ.
#7
,
|
|
|
Цитата archimed7592 @ Используй тогда аггрегацию(has-a) вместо наследования(is-a) (аля паттерн Адаптер )... а как ты себе это представляешь для QThread ? |
Сообщ.
#8
,
|
|
|
Ммм... Не особо помню как устроен QThread, но, тем не менее:
class MyThread { QThread thread; public: MyThread() : thread(...) { } int run() { ... thread.run(); return ... } } |
Сообщ.
#9
,
|
|
|
run чисто виртуальный метод - поэтому нельзя создать оюъект QThread в MyThread
|
Сообщ.
#10
,
|
|
|
class MyThread { class ThreadImpl : public QThread { void run() { ... } }; ThreadImpl thread; public: MyThread() : thread(...) { } int run() { ... thread.run(); return ... } } |
Сообщ.
#11
,
|
|
|
archimed7592, тогда от него нельзя наследоваться и верекрывать виртуальный run
мне нужно просто оставить 2 слота started & finished Может не городить, а просто их вызвать ? class MyClass : protected QThread { public slots : void started (void) { emit QThread::started(); } void finished(void) { emit QThread::finished(); } } |
Сообщ.
#12
,
|
|
|
Цитата zss @ тогда от него нельзя наследоваться и верекрывать виртуальный run Template Method. Цитата zss @ Может не городить, а просто их вызвать ? Так вызываются только сигналы... Слоты можно вызывать точно так же, как самые обыкновенные ф-ции. |
Сообщ.
#13
,
|
|
|
Цитата archimed7592 @ Так вызываются только сигналы... Слоты можно вызывать точно так же, как самые обыкновенные ф-ции. точно тогда так class MyClass : protected QThread { public slots : void started (void) { QThread::started(); } void finished(void) { QThread::finished(); } } Цитата archimed7592 @ Template Method. что ты имеешь ввиду |
Сообщ.
#14
,
|
|
|
Цитата zss @ что ты имеешь ввиду 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; } |
Сообщ.
#15
,
|
|
|
Цитата archimed7592 @ MyThread() : thread(*this) { } разве можно использовать this в конструкторе. Объект еще не создан и моя студия ругается на это... |