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

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

Страниц: 1 2 3 [4] 5 6   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Помогите с задачей производителя/потребителя  (Прочитано 37942 раз)
BRE
Гость
« Ответ #45 : Март 03, 2012, 11:16 »

Сконеекть, отэмить сконнекченный сигнал из основного потока в созданный. Слот выполнится или нет? Улыбающийся
А ты проверь в каком контексте он выполняется. Ты даже не понял куда нужно посмотреть, хотя в этой теме я писал подсказку для V1KT0P, с которым мы во всем разобрались, правда в привате. Улыбающийся

Насколько я помню, BRE, ты уже агрился на меня в теме "Невидимый плагин для дизайнера", а под конец, поняв о чём речь, постыдно убежал...
Куда я убежал? Я вспомнил о этой возможности сам, случайно. А ты даже не смог ее сформулировать, потому что даже не знаешь как это все работает.
Лепетал просто: "Ну у меня же работает...". Как в ералаше: "Ну я же изобрел...". Улыбающийся
Думаю не сможешь этого объяснить и сейчас.

А почему пост pastor оставил без ответа, не нашел что сказать?

Ты нахватался вершков и давай писать кучу своих домыслов во всех темах. Это утомляет, времени не хватает ходить по всем темам, где ты пишешь и поправлять за тобой.

Совет: Проверяй сначала сам. Не обо всём в учебниках пишут.
Распечатай и повесь себе на монитор. Улыбающийся
Записан
lolbla2
Гость
« Ответ #46 : Март 03, 2012, 11:19 »

Верес я на самом деле хотел бы сам решить эту задачу, но у меня возникают мелкие вопросы, на которые бы хотел бы тут получать ответы, вопросы, например как про мьютекс. Статья интересная обязательно прочту. У меня ещё вопрос: а этот exec() можно в начале метода run прописывать, если у меня в run бесконечный цикл, то если поставить exec() в конце, тогда дело до него дойдёт...

Код
C++ (Qt)
void run()
{
exec() // сюда можно этот ехес() поставить?
while(true)
{
//чото бесконечно мутим
}
// если его ( ехес() ) сюда засунуть то дело до него не дойдёт никогда
}

Вопрос 2: Зачем нужен QMutexLocker ? Ведь у QMutex есть lock() и unlock()...
« Последнее редактирование: Март 03, 2012, 11:21 от lolbla2 » Записан
BRE
Гость
« Ответ #47 : Март 03, 2012, 11:24 »

У меня ещё вопрос: а этот exec() можно в начале метода run прописывать, если у меня в run бесконечный цикл, то если поставить exec() в конце, тогда дело до него дойдёт...
exec по сути тоже запускает бесконечный цикл, в котором происходит обработка событий, поэтому при таком коде выполнение до твоего бесконечного цикла не дойтет, пока будет выполняться цикл из exec.

Можно добавить свою обработку событий прямо в твой бесконечный цикл, см. QEventLoop.
Записан
BRE
Гость
« Ответ #48 : Март 03, 2012, 11:27 »

Вопрос 2: Зачем нужен QMutexLocker ? Ведь у QMutex есть lock() и unlock()...
Это позволяет автоматизировать разблокировку мьютекса, что бы ты не забыл.
Записан
Bepec
Гость
« Ответ #49 : Март 03, 2012, 11:27 »

У меня работает, а ты отвечаешь что нет Подмигивающий Сигнал мой выполняется в доп потоке Подмигивающий Иначе не было бы смысла в моих программах Подмигивающий Так что BRE успокойся и начинай проверять.

Я незнаю некоторых простых вещей. Я не могу точно и детально тебе объяснить что и где, НО. Но я сначала проверяю. Работает - гуд. Не работает - надо разбираться.

Согласись - всё знать нереально, а ту часть, что тебе нужна - реально Подмигивающий

lolbla2 - у тебя в нём нет необходимости, помоему Подмигивающий Ибо exec() создаёт точно такой же бесконечный цикл, как и у тебя.

Проще говоря, это 2 варианта:

1) зацикленный поток, он будет выполняться до тех пор, пока ты его не остановишь. (с помощью того же сигнала или напрямую не изменишь перем stop)
Код:
// bool stop = false;
void run()
{
for(;!stop;)
{
// тут чагой то выполняется
}
}
2) событийный поток, который при запуске заснёт(будет ждать сигналов, событий), и будет просыпаться только при получении сигнала/события.
Код:
void run()
{
QThread::exec()
}
public slots:
void send();

В чём недостатки и преимущества?
1 вариант, когда надо выполнить что-то определённое кол-во раз и убить поток по правильному. (правильное убиение потока - его логическое завершение ф-ции run())
2 вариант, когда нужно выполнять ф-ции по требованию, как у тебя например. Тыкнул пользователь кнопочку - сигнал пошёл - поток проснулся, выполнил, опять спит. Вот ток убивать его нужно exit'ом.
Записан
BRE
Гость
« Ответ #50 : Март 03, 2012, 11:29 »

У меня работает, а ты отвечаешь что нет Подмигивающий
Оно у тебя работает как QSound? Улыбающийся

Иначе не было бы смысла в моих программах Подмигивающий
Строит глазки
« Последнее редактирование: Март 03, 2012, 11:31 от BRE » Записан
mutineer
Гость
« Ответ #51 : Март 03, 2012, 11:29 »

BRE сделай проект. Переопредели RUN в бесконечный цикл и сделай 1 слот, без exec().

Сконеекть, отэмить сконнекченный сигнал из основного потока в созданный. Слот выполнится или нет? Улыбающийся

Если создавать слот у потомка QThread и коннектиться к нему через очередь, то довольно опрометчиво ожидать, что он будет выполняться в потоке, которым управляет этот потомок QThread (если не делать извращений типа moveToThread(this))

А если коннектиться не через очередь, то и eventLoop не нужен для вызова
Записан
Bepec
Гость
« Ответ #52 : Март 03, 2012, 11:32 »

multineer, вопрос, а почему moveToThread извращение? Улыбающийся

Как иначе ты поместишь класс, нужный тебе, в другой поток?

Тролли даже рекомендуют разделять управляющую и исполняемую часть потоков знаешь как?
Код:
QThread *thread = new QThread;
Worker * work = new Worker;
work.moveToThread(thread);

За точность кода не ручаюсь Подмигивающий
Записан
lolbla2
Гость
« Ответ #53 : Март 03, 2012, 11:33 »

Вопрос 2: Зачем нужен QMutexLocker ? Ведь у QMutex есть lock() и unlock()...
Это позволяет автоматизировать разблокировку мьютекса, что бы ты не забыл.


Не понял... Как именно автоматизировать, можно пример?

unlock() же разблокирует...

P.S. У вас тут интеллектуальный бой за звание лучший программист?)))
« Последнее редактирование: Март 03, 2012, 11:34 от lolbla2 » Записан
mutineer
Гость
« Ответ #54 : Март 03, 2012, 11:34 »

multineer, вопрос, а почему moveToThread извращение? Улыбающийся

Как иначе ты поместишь класс, нужный тебе, в другой поток?

Тролли даже рекомендуют разделять управляющую и исполняемую часть потоков знаешь как?
Код:
QThread *thread = new QThread;
Worker * work = new Worker;
work.moveToThread(thread);

За точность кода не ручаюсь Подмигивающий

извращение - это делать moveToThread(this) - то есть пихать объект QThread внутрь подконтрольного ему же потока
Записан
BRE
Гость
« Ответ #55 : Март 03, 2012, 11:35 »

Не понял... Как именно автоматизировать, можно пример?
В документации к этому классу есть отличный пример, как с ним и как без него. Улыбающийся
Записан
BRE
Гость
« Ответ #56 : Март 03, 2012, 11:36 »

P.S. У вас тут интеллектуальный бой за звание лучший программист?)))
Скорее попытка донести, что чудес не бывает. Улыбающийся
Записан
Bepec
Гость
« Ответ #57 : Март 03, 2012, 11:39 »

Код:
void send
{
QMutexLock h(&mutex);
// создаётся мутекс локер и автоматически выполняет ф-цию mutex.lock()
//тут выполняется программа.


}// а вот тут уничтожаются локальные объекты. QMutexLock вызывает деструктор, в котором вызывается ф-ция mutex.unlock()

Тут не бой. Тут попытка выкоежиться у BRE. Уже была один раз, но к сожалению он провалил её, убежав с поля боя Подмигивающий
Записан
mutineer
Гость
« Ответ #58 : Март 03, 2012, 11:40 »

Вопрос 2: Зачем нужен QMutexLocker ? Ведь у QMutex есть lock() и unlock()...

Это что бы ты вызвав lock() случайно не забыл вызвать unlock()
Записан
BRE
Гость
« Ответ #59 : Март 03, 2012, 11:44 »

Тут не бой. Тут попытка выкоежиться у BRE.
Тут попытка избавить человека от потока непроверенного бреда.

Уже была один раз, но к сожалению он провалил её, убежав с поля боя Подмигивающий
А о чем можно разговаривать с человеком, который понятия не имеет о предмете разговора?
Который, кстати, ушел из темы сам, решив не отвечать на неудобные вопросы на которые он ответов не знал.
Возвращайся к "Мурзилке"... Улыбающийся
Записан
Страниц: 1 2 3 [4] 5 6   Вверх
  Печать  
 
Перейти в:  


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