Russian Qt Forum
Ноябрь 26, 2024, 08:54 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QThread в Qt 3.3.4  (Прочитано 5289 раз)
noi
Гость
« : Октябрь 12, 2009, 00:10 »

1. Требуется сделать поток, обрабатывающий очередь сообщений от gui потока. Подскажите пожалуйста, какими средствами Qt3 это можно сделать.
Для Qt4 вроде все понятно: там QThread является наследником QObject, имеет метод exec и можно задействовать механизм сигналов слотов.
2. Тут у меня возник попутный вопрос по поводу QCoreApplication::postEvent уже для Qt4: Если использовать postEvent для передачи сообщения из главного потока во второстепенный, то приемником должен быть объект QObject, объявленный в функции run второстепенного потока? Я правильно понимаю?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Октябрь 12, 2009, 00:34 »

Никто не мешает воспользоваться множественным наследованием:


Код
C++ (Qt)
class MyThread : public QThread, public QObject
{
   Q_OBJECT
 
public slots:
   // your slots
 
signals:
  // your signals
};
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
noi
Гость
« Ответ #2 : Октябрь 12, 2009, 15:46 »

Спасибо, но все же не понятно: В документации Qt4 указано, что механизм слотов - сигналов может быть использован для связи между объектами в разных потоках, а в документации на Qt3 ничего такого не сказано! И если так, то если я правильно понял, класс должен также наследовать еще и от qeventloop, чтобы запустить exec в функции run?

А что насчет второго моего вопроса?
Записан
Steven_Orko
Гость
« Ответ #3 : Октябрь 12, 2009, 16:13 »

Спасибо, но все же не понятно: В документации Qt4 указано, что механизм слотов - сигналов может быть использован для связи между объектами в разных потоках, а в документации на Qt3 ничего такого не сказано! И если так, то если я правильно понял, класс должен также наследовать еще и от qeventloop, чтобы запустить exec в функции run?
Правильно, там и не будет написано. Механизм сигналов-слотов между потоками появился только в Qt4. В Qt3 вообще поддержки такого нет.
Опиши задачу. Потому, что трудно ответить на вопросы, не отправив читать Бланшета и документацию на Qt3.
Зачем создавать отдельный поток для обработки GUI-сообщений, если это и так делается обычно в основном?
Записан
noi
Гость
« Ответ #4 : Октябрь 12, 2009, 20:59 »

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

Спасибо за терпение))
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.077 секунд. Запросов: 22.