Russian Qt Forum

Qt => Общие вопросы => Тема начата: noi от Октябрь 12, 2009, 00:10



Название: QThread в Qt 3.3.4
Отправлено: noi от Октябрь 12, 2009, 00:10
1. Требуется сделать поток, обрабатывающий очередь сообщений от gui потока. Подскажите пожалуйста, какими средствами Qt3 это можно сделать.
Для Qt4 вроде все понятно: там QThread является наследником QObject, имеет метод exec и можно задействовать механизм сигналов слотов.
2. Тут у меня возник попутный вопрос по поводу QCoreApplication::postEvent уже для Qt4: Если использовать postEvent для передачи сообщения из главного потока во второстепенный, то приемником должен быть объект QObject, объявленный в функции run второстепенного потока? Я правильно понимаю?


Название: Re: QThread в Qt 3.3.4
Отправлено: pastor от Октябрь 12, 2009, 00:34
Никто не мешает воспользоваться множественным наследованием:


Код
C++ (Qt)
class MyThread : public QThread, public QObject
{
   Q_OBJECT
 
public slots:
   // your slots
 
signals:
  // your signals
};


Название: Re: QThread в Qt 3.3.4
Отправлено: noi от Октябрь 12, 2009, 15:46
Спасибо, но все же не понятно: В документации Qt4 указано, что механизм слотов - сигналов может быть использован для связи между объектами в разных потоках, а в документации на Qt3 ничего такого не сказано! И если так, то если я правильно понял, класс должен также наследовать еще и от qeventloop, чтобы запустить exec в функции run?

А что насчет второго моего вопроса?


Название: Re: QThread в Qt 3.3.4
Отправлено: Steven_Orko от Октябрь 12, 2009, 16:13
Спасибо, но все же не понятно: В документации Qt4 указано, что механизм слотов - сигналов может быть использован для связи между объектами в разных потоках, а в документации на Qt3 ничего такого не сказано! И если так, то если я правильно понял, класс должен также наследовать еще и от qeventloop, чтобы запустить exec в функции run?
Правильно, там и не будет написано. Механизм сигналов-слотов между потоками появился только в Qt4. В Qt3 вообще поддержки такого нет.
Опиши задачу. Потому, что трудно ответить на вопросы, не отправив читать Бланшета и документацию на Qt3.
Зачем создавать отдельный поток для обработки GUI-сообщений, если это и так делается обычно в основном?


Название: Re: QThread в Qt 3.3.4
Отправлено: noi от Октябрь 12, 2009, 20:59
Задача заключается в следующем:
В отдельном потоке производится выполнение функции int longOperation( int par1, int par2 ). Пользователь в GUI вводит значение par1 и par2, после чего, по нажатию на кнопку "DO" должна начать работу функция longOperation, в которую передадутся введенные пользователем значения. Возвращаемое значение функции посылается (postEvent) в GUI для отображения. Надо сделать так, чтобы пользователь не ждал завершения предыдущего вызова функции, а мог сразу же выставить новые значения и жать на "DO". Т.е. формировать очередь заданий. Результаты работы функции для каждого нажатия "DO" должны отображаться по мере выполнения.
Как реализовать такой механизм на Qt3?

Спасибо за терпение))