Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.135.201.209] |
|
Страницы: (6) « Первая ... 4 5 [6] все ( Перейти к последнему сообщению ) |
Сообщ.
#76
,
|
|
|
zss
что мешает добавить слоты аналогичные invokeStart() - для разных методов? для возвращаемых значений различных типов можно использовать сигналы вида: void methodFinished(int)const; void methodFinished(QString)const; void methodFinished(double)const; |
Сообщ.
#77
,
|
|
|
В общем забросил я в свое время проект, но тут опять возвращаюсь к нему.
Еще раз перечитал все сообщения. 1. gryz, если честно - не совсем понял код и как он работает и что есть moveToThread... ? 2. Flex Ferrum, ну вроде все понял, кроде некоторых моментов. Например Цитата Flex Ferrum @ Не. Лучше не так, а вот так: class WorkerThread : public QThread { public: WorkerThread(boost::function<void ()> worker, boost::function<void (const std::exception&)> xHandler) : m_Worker(worker), m_ExHandler(handler) {;} int run() { try { m_Worker(); } catch (const std::exception& ex) { m_ExHandler(ex); } } }; как сбиндить метод. Если просто метод класса, то boost::bind (&Class::function, this) а как сбиндить для WorkerThread void func (const std::exception& ex); P.S. Попробовал данный способ Цитата Flex Ferrum @ QWaitDialog dialog; QConnectThread thread(); // тут сам придумаешь, что написать. connect(&thread, SIGNAL(ThreadEnd(int)), &dialog, SLOT(ThreadEnded(int))); connect(&thread, SIGNAL(ThreadError(const QString&)), &dialog, SLOT(ThreadError(const QString&))); thread.start(); dialog.exec(); поток запускается, диалог отображается, после завершения потока окно закрывается (дергается слот диалого) Но !!! Таймер внутри диалога не отрабатывает. Почему ? Ведь диалог отрисовывается. Его можно даже перемещать |
Сообщ.
#78
,
|
|
|
Совсем не помню, чего там писал
Почитаю... moveToThread - переносит объект (QObject) из данного потока в какой-то другой. Каждый Qt object "живет" в каком-то потоке. Это означает, что обработка вызова его слотов будет происходит в этом потоке. zss а ты пробовал его запускать? |
Сообщ.
#79
,
|
|
|
zss
Так что непонятно-то? Экземпляр класса Client - это объект, методы которого нам надо исполнить. В примере его метод start() выполняет какие-то вычисления. Объект должен "жить" в не GUI потоке. DummyMainWindow - класс, который осуществляет взаимодействие с пользователем. В его конструкторе запускается параллельный "вычисляющий" поток. Создается "вычисляющий" объект. Перемещается в вычисляющий поток. Далее, при помощи сигнала кнопки clicked() вызываем слот "вычисляющего" объекта invokeStart(). Обратная связь с GUI-потоком реализуется при помощи сигналов methodStarted() и methodFinished(). Все сигнал-слот соединения имеют тип Qt::QueuedConnection. Т.е. вызовы слотов происходят асинхронно. |