QT4: "очередь сигналов"... ? (параллельная обработка сигналов?)

Модератор: Модераторы разделов

Аватара пользователя
Denjs
Сообщения: 1685
ОС: SuSe 10.2

QT4: "очередь сигналов"... ?

Сообщение Denjs »

Граждане QT-шнеги.
Возник вопросик насчет принципов работы объекта при обраотке получаемых сигналов.
Рыть гугль как-то без-идейно потому как не до конца понимаю по каким ключевым словам рыть...

Модель: объект получает сигнал, начинает его обрабатывать;
1) в этот момент получает второй сигнал на этот-же слот.
Вопрос: что делает объект - довершает обработку этого сигнала? как я понимаю это стандартный режим.

2) в этот момент поступает сигнал на другой слот
Вопрос: объект все равно будет обрабатывать этот сигнал а потом перейдет к обработке второго или можно запустить 2 обработки одновременно?

3) в связи с этим третий вопрос -
как управлять такой параллельной обработкой поступающих сигналов...
можно-ли прервать обработку предыдущего сигнала и начать обработку нового или запустить параллельно 2 обработки
и т.п.

предположим (гипотетически) что мне надо настроить такое поведение что-бы обработка текущего сигнала прекращалась и начиналась обработка нового сигнала?

где рыть и что читать?

или я вообще в корне не верно понимаю механизмы слот-сигнал.
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: QT4: "очередь сигналов"... ?

Сообщение Uncle_Theodore »

Ну, начни отсюда читать...
http://doc.trolltech.com/qq/qq14-threading.html
Спасибо сказали:
Аватара пользователя
Alxn1
Сообщения: 402
Статус: Красноглазик со стажем
ОС: Mavericks

Re: QT4: "очередь сигналов"... ?

Сообщение Alxn1 »

Вообще, если вы не создаёте дополнительных нитей (Threads) и не генерируете из них сигналов, то весь этот механизм работает (по-идее должен) в одной нити, т.е. вышеописанных вами ситуаций быть не может. В случае многопоточности на эту тему в 4-м Qt почти все классы и их функции реинтерабельны, т.е. могут выполняться в нескольких нитях паралельно, не мешая другим экземплярам. И ваши обработчики тоже по-возможности должны быть реинтерабельными. Если это невозможно, то следует использовать различные механизмы синхронизации нитей, такие как семафоры и мьютексы. Но что-то мне подсказывает, что у вас поток один, потому можно просто положиться на механизм слотов-сигналов. ;)
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: QT4: "очередь сигналов"... ?

Сообщение v04bvs »

Denjs писал(а):
31.08.2007 00:50
Рыть гугль как-то без-идейно потому как не до конца понимаю по каким ключевым словам рыть...

Qt4 source

Модель: объект получает сигнал, начинает его обрабатывать;
1) в этот момент получает второй сигнал на этот-же слот.

Такого не бывает. У каждого потока есть такая штука, назвыается event loop. В нём он спрашивает "а не пришли ли мне какие-нибудь события?" если пришли - последовательно вызываем все слоты, подписанные на это событие. Потом вытаскиваем следующее событие и т.д. Всё линейно, даже в случае многопоточности.

как управлять такой параллельной обработкой поступающих сигналов...

Надеюсь, я ответил на ваш вопрос. Если есть сомнения - рекомендую изучить исходный код Qt в этой области.

предположим (гипотетически) что мне надо настроить такое поведение что-бы обработка текущего сигнала прекращалась и начиналась обработка нового сигнала?

Вряд ли это можно сделать по-нормальному, и уж точно этого не нужно делать.
Спасибо сказали: