crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

4 страниц V   1 2 3 > »   
Ответить в данную темуНачать новую тему
> Слоты и Потоки
Nokin
  опции профиля:
сообщение 30.9.2008, 11:54
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 17
Регистрация: 12.8.2008
Пользователь №: 262

Спасибо сказали: 0 раз(а)




Репутация:   0  


Правильно ли я понимаю, что слоты
class CxConnectionThread :public QThread
{
    Q_OBJECT

    ...

    private slots:
    void newConnection( CxConnection *pConnection);
    void connectionError( QAbstractSocket::SocketError socketError);
    void disconnected();
    void destroyed( QObject *pObj = 0);
    ...
}
будут для данного примера выполняться в дочернем потоке, а не в основном?

P.S. Прошу прощения, что поднимаю старую тему.
---
Полный код примера
Причина редактирования: Добавил ссылку на полный код примера
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 30.9.2008, 12:25
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Очень даже здорово, что подняли! :) Мне тоже интересно посмотреть эту темку, т.к. с потоками я еще плаваю....

P.S. вопрос не совсем по существу: почему в коде вместо номера порта смайлики? :blink:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 30.9.2008, 12:29
Сообщение #3


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Цитата(Nokin @ 30.9.2008, 12:54) *
будут для данного примера выполняться в дочернем потоке, а не в основном?
Угу, так и есть.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_anonymous_*
сообщение 30.9.2008, 15:54
Сообщение #4





Гости








    


Слоты будут выполняться в основном потоке. Дочерний поток это метод CxConnectionThread::run, и все что в нем выполняеться это и есть дочерний поток.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 30.9.2008, 17:29
Сообщение #5


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Цитата(Гость_anonymous_* @ 30.9.2008, 16:54) *
Слоты будут выполняться в основном потоке. Дочерний поток это метод CxConnectionThread::run, и все что в нем выполняеться это и есть дочерний поток.
Слоты выполняются в том потоке, в котором был создан их объект. Если он создан в основном потоке, то слоты будут выполняться в основном, если в дочернем, то и слоты будут выполняться в дочернем.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 30.9.2008, 17:34
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Большая просьба: пожалуйста, соедините темы, которые были разделены. Приведенный кусок кода был вырван из той программы, которая рассматривалась в той теме. Искать тему долго, а пример приведен был хороший. Заранее спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 30.9.2008, 17:56
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(AD @ 30.9.2008, 21:34) *
соедините темы, которые были разделены.
это принципиально разные темы, когда челове будет искать тему о потоках, он не будет искать ее в теме о QTcp***.

В первый пост добавил ссылку на полный код примера.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_anonymous_*
сообщение 30.9.2008, 18:10
Сообщение #8





Гости








    


Цитата(ViGOur @ 30.9.2008, 17:29) *
Цитата(Гость_anonymous_* @ 30.9.2008, 16:54) *
Слоты будут выполняться в основном потоке. Дочерний поток это метод CxConnectionThread::run, и все что в нем выполняеться это и есть дочерний поток.
Слоты выполняются в том потоке, в котором был создан их объект. Если он создан в основном потоке, то слоты будут выполняться в основном, если в дочернем, то и слоты будут выполняться в дочернем.


В первом посте приведен код. Предполагаеться что объект CxConnectionThread будет создан в основном потоке. Слоты будут принадлежать тоже основному потоку, НО:

1) Слот мы может вызвать напрямую из run, тогда он выполниться в доернем потоке. Пример:

void CxConnectionThread::run()
{
...
    disconnected();
...
}


2) Слот может быть вызван через механихм сигнал\слот. Тогда слот выполниться в главном потоке. Пример:

void CxConnectionThread::run()
{
...
    QTcpSocket sosket;
...
    connect(&sosket, SIGNAL(error ( QAbstractSocket::SocketError)), SLOT(connectionError( QAbstractSocket::SocketError)));
...
}



Что нетак?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_anonymous_*
сообщение 30.9.2008, 18:12
Сообщение #9





Гости








    


В добавок к предыдущему посту:

Цитата
The code that appears in the run() reimplementation will then be executed in a separate thread.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 30.9.2008, 18:24
Сообщение #10


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Цитата(Гость_anonymous_* @ 30.9.2008, 19:10) *
Что нетак?
Да все так, просто я ошибся тогда, когда делал пример, а сейчас думал, что там все правильно! :blush:
Нужно переделывать пример... :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

4 страниц V   1 2 3 > » 
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 14:23