Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.141.0.61] |
|
Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
Ругается или предупреждает?
Смотря как использовать... |
Сообщ.
#17
,
|
|
|
тут еще вопросик возник.
Вот например класса class MyThread : protected QThread { private : virtual void run (void) { ... } public : void connect (void) { QThread::start (); } void disconnect (void) {...} } тоесть метод connect запускает отдельный поток, а сигнал finished говорит о его завершении. Но тут понадобилось и disconnect запускать в отдельном потоке и тоже ожидать finished. Получается нужно 2 разных объекта-потока создавать ? |
Сообщ.
#18
,
|
|
|
Цитата zss @ Получается нужно 2 разных объекта-потока создавать ? Вот ты и пришёл потихоньку к аггрегации . Хотя... Система сигнал/слотов спасёт отца русской демократии . Сделай disconnected слотом и прицепи на него нужный сигнал. |
Сообщ.
#19
,
|
|
|
Цитата archimed7592 @ Хотя... Система сигнал/слотов спасёт отца русской демократии . Сделай disconnected слотом и прицепи на него нужный сигнал не понял - а что это даст ? Есть 2 разных метода, 2 разных потока, 2 разных слота... |
Сообщ.
#20
,
|
|
|
Цитата zss @ Есть 2 разных метода, 2 разных потока, 2 разных слота... Ааа, я просто неправильно тебя понял . Цитата zss @ Получается нужно 2 разных объекта-потока создавать ? Если тебе нужно 2 потока, то создавать нужно, ессно 2 объекта-потомка QThread. |
Сообщ.
#21
,
|
|
|
Цитата archimed7592 @ Если тебе нужно 2 потока, то создавать нужно, ессно 2 объекта-потомка QThread. а как быть если общие жанные нужны - например состояние |
Сообщ.
#22
,
|
|
|
Цитата zss @ а как быть если общие жанные нужны - например состояние Паттерн State . Ну а по хорошему - просто общую структурку создрать и хранить shared_ptr на неё в обоих объектах-потоках. Либо, если они оба будут неотделимым целым от третьего класса, то просто хранить указатель на "папу". |
Сообщ.
#23
,
|
|
|
Цитата archimed7592 @ Паттерн State пока не дочитал до него Цитата archimed7592 @ Ну а по хорошему - просто общую структурку создрать и хранить shared_ptr на неё в обоих объектах-потоках. Либо, если они оба будут неотделимым целым от третьего класса, то просто хранить указатель на "папу". а можно ли по-другому. Например сам класс - хранит данные и реализует методы, но не является потоковым class MyClass private : // data public : bool connect (void) {...} bool disconnect (void) {...} а 2 потоковых объекта реализуют вызов class ConnectThread : public QThread { private : MyClass& m_class; virtual void run (void) { m_class.connect(); } public : explicit ConnectThread (MyClass& mclass) : m_class (m_class) {} } class DisconnectThread : public QThread { private : MyClass& m_class; virtual void run (void) { m_class.disconnect(); } public : explicit DisconnectThread (MyClass& mclass) : m_class (m_class) {} } ли это не совсем правильно ? |
Сообщ.
#24
,
|
|
|
Та не... Всё прально. Только нет гарантии продолжительности жизни m_class.
|
Сообщ.
#25
,
|
|
|
Цитата archimed7592 @ Та не... Всё прально. Только нет гарантии продолжительности жизни m_class. ну тогда так class ConnectThread : public QThread { private : boost::weak_ptr<MyClass> m_class; virtual void run (void) { if (m_class.expired()) return; m_class.connect(); } public : explicit ConnectThread (boost::weak_ptr<MyClass> mclass) : m_class (m_class) {} } Хотя объект-поток должен умереть, после того как поток отработал. Нет смысла использовать этот объект. Проще создать новый. Поэтому и время его жизни должно быть не более чем у m_class |