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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Разграничение передачи сигнала в несколько потоков  (Прочитано 13393 раз)
thechicho
Гость
« Ответ #15 : Январь 07, 2012, 12:00 »

странные вы какие-то. кодерская болезнь может какая Веселый
я пишу софт для себя и для своих. поэтому такой подход.
если бы я писал на продажу или работал "на дядю" и писал в команде, разумеется я бы со всей ответственностью подошел к написанию кода, по мере своих знаний.

я уверен на 100500%, что тот, кто другого называет быдлокодером, сам тупит в коде тоже хотяб 10-15%.
анекдот: работают вместе 2 кодера. 1 чота написал, другой мысленно: "да зае этот быдлокодер тупой О_о". 2 чота написал, 1ый: "да зае этот быдлокодер тупой О_о". вот и вся мораль про быдлокодерство.
лан, харе флудить, тема сисек давно раскрыта Улыбающийся
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #16 : Март 03, 2012, 17:38 »

какойто неадекват.
а по теме, про передачу евентов в поток то что мне нужно, спасибо!
Записан
Bepec
Гость
« Ответ #17 : Март 03, 2012, 22:26 »

Без красивых подходов, не видать красивых программ.

А Ичико наш местный тролль Подмигивающий
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #18 : Март 12, 2012, 17:05 »

хотя заметил, что event отсылаемый потоку почему то все равно выполняется в главном потоке...
Записан
vbi
Гость
« Ответ #19 : Март 13, 2012, 17:06 »

Я как-то делал так:
В конструктор потока передавал ИД (число, например порядковый номер)

а при отправке сигнала в качестве второго параметра передавал бы нужный ИД. А каждый поток в себе проверяет его ли этот ИД или не его. если не его, то возврат, если его - делает свое дело:

Код:
for (int i = 0; i < N; i++ {
NewThread *thread = new NewThread(i,this);
connect(this, SIGNAL(StringSignal(QString &, int)), thread, SLOT(StringSlot(QString &, int)));
}

emit StringSignal("TEST", 9); // только поток с ИД 9 получит сигнал, проверит, что его ИД тоже 9 тогда выполнит какие-то действия. Остальные потоки ничего не будут делать.
Такой механизм, мною написаный, работает прямо сейчас в Варшавском ДЕПО Улыбающийся
Записан
thechicho
Гость
« Ответ #20 : Апрель 28, 2013, 16:38 »

vbi, ваш сигнал поступит во все потоки. но код выполнит только поток с ид 9.

Для такой задачи можно, например, создать в .h
private:
    QList<NewThread *> threads;

затем в цикле записать
//threads.clear();
for (int i = 0; i < N; i++ {
    ...
    threads.append(thread);
    ...
}

и можно обращаться на прямую к полям и методам нужного потока
thread.at(9)->anyVariable = "blabla";
thread.at(9)->processingAnything(...);

а вообще работает, да и пофик Улыбающийся
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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