crossplatform.ru

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


  Ответ в В каком контексте будет вызван слот
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Litkevich Yuriy Дата 11.6.2009, 20:56
  Собственно почему странно, если так можно самого "потока" запнуть в самого себя, то почему он сам этого не делает.
Т.е. должно было бы быть так:
QThread th(...); // Уже завертелся новый поток, но пока безработный. А может и сразу работу выполняет.
и все функции, объявленные в нём, уже в другом потоке.
SABROG Дата 11.6.2009, 20:51
 
Цитата(Litkevich Yuriy @ 11.6.2009, 21:48) *
Цитата(SABROG @ 11.6.2009, 21:56) *
Может поместить это решение в "Секреты и интересные возможности" ?
блин странно это всё.

Может кто с QtConcurrent работал, там может быть можно иначе сделать?
BRE Дата 11.6.2009, 20:50
 
Цитата(SABROG @ 11.6.2009, 21:46) *
Цитата(BRE @ 11.6.2009, 21:44) *
С точки зрения архитектуры подхожу к объектам потоков по другому...


Получается, чтобы связать слот в потоке и сигнал из главного окна тебе приходится создавать дополнительный объект в run() к которому все и привязывать?

Да, я не добавляю слоты в класс наследник от QThread (не расширяю его функциональность).
А как ты и написал делаю отдельный класс, который содержит сигналы/слоты и он выполняет всю работу, его создаю в run и настраиваю связи.
Litkevich Yuriy Дата 11.6.2009, 20:48
 
Цитата(SABROG @ 11.6.2009, 21:56) *
Может поместить это решение в "Секреты и интересные возможности" ?
блин странно это всё.
SABROG Дата 11.6.2009, 20:46
 
Цитата(BRE @ 11.6.2009, 21:44) *
С точки зрения архитектуры подхожу к объектам потоков по другому...


Получается, чтобы связать слот в потоке и сигнал из главного окна тебе приходится создавать дополнительный объект в run() к которому все и привязывать?
BRE Дата 11.6.2009, 20:44
  Я к самому классу QThread и его наследникам отношусь немного по другому.
Объект этого класса использую только для управления потоком, я не расширяю его функциональность.
Т.е. есть методы управления и проверки состояния потока (с ними работа идет из запустившего потока) и как-бы отдельно метод run, который и описывает сам поток. Вот в нем я создаю необходимые объекты связываю их сигналами с объектами в других потоками и т.д.
Управление идет через объект находящийся в контексте родительского (основного) потока, а что там в потоке делается это уже к run().

Блин, не знаю как получилось описать. :rolleyes:
С точки зрения архитектуры подхожу к объектам потоков по другому... :)
igor_bogomolov Дата 11.6.2009, 20:06
 
Цитата(Litkevich Yuriy @ 11.6.2009, 18:46) *
Жаль авторство не могу себе присвоить , хотя конечно решение самом себе в голову напрашивается.
Себе авторство тоже присвоить не могу, но если посмотришь здесь (в атаче), увидишь, что я пришел к такому же решению. Я тогда только разбирался в этом вопросе, и сделал так скорее по незнанию. Я предлогаю делать так
ThreadSocket::ThreadSocket(QObject *parent)
    : QThread(parent)
{
    moveToThread(this);
}
На мой взгляд, это будет правильнее.
SABROG Дата 11.6.2009, 17:56
 
Цитата(BRE @ 11.6.2009, 18:41) *
Этот метод был разработан несколькими днями ранее kuzulis.


Если верить его словам, то даже не им, он где-то это увидел :)

Жаль авторство не могу себе присвоить ^_^ , хотя конечно решение самом себе в голову напрашивается.

Улыбнула фраза Константина

Цитата
собсна, вообще не удивительно.
а вот tc->moveToThread(tc) улыбнуло...ассоциируется с картинкой, где чел сам себе в зад залазит /* может видел кто? */ Улыбающийся


Ну хотябы могу себе название метода "Мюнхгаузена" присвоить ;)

---
Кстати, скорее всего человек увидел этот метод отсюда http://forum.vingrad.ru/forum/topic-241300...y1737536/0.html Этот топик один из первых выдается в гугле на поиск moveToThread.

Еще немного погуглил и нашел такую переписку с канала #Qt:

Цитата
[04:58] <daniel> thiago_home: Yeah I just noticed I don't have to wait.
[04:59] <daniel> Is "thread.start(); thread.moveToThread(&thread);" ok?
[05:00] <thiago_home> yes


Собственно, я так понимаю, что thiago_home это Thiago Macieira, раз он одобряет этот метод, то почему бы троллям не предложить ввести что-то типа флага, чтобы объект сразу сам в себя перемещался внутри метода start().

wasyota тоже такой метод предлагает.
---
Может поместить это решение в "Секреты и интересные возможности" ?
Litkevich Yuriy Дата 11.6.2009, 17:46
 
Цитата(SABROG @ 11.6.2009, 21:36) *
Я назвал этот метод методом "Мюнхаузена"
Цитата(BRE @ 11.6.2009, 21:41) *
Этот метод был разработан несколькими днями ранее kuzulis.
на что Константин сказал:
Цитата
улыбнуло...ассоциируется с картинкой, где чел сам себе в зад залазит
BRE Дата 11.6.2009, 17:41
 
Цитата(SABROG @ 11.6.2009, 18:36) *
Я решил поэкспериментировать и пришел к такому вот странному решению:

thread.moveToThread(&thread);


Я назвал этот метод методом "Мюнхаузена" :lol:

Теперь действительно сигналы отправляются из главного потока и слот вызывается в дочернем потоке.

Этот метод был разработан несколькими днями ранее kuzulis. ;)
http://www.prog.org.ru/topic_9694_0.html
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 17:45