Граждане QT-шнеги.
Возник вопросик насчет принципов работы объекта при обраотке получаемых сигналов.
Рыть гугль как-то без-идейно потому как не до конца понимаю по каким ключевым словам рыть...
Модель: объект получает сигнал, начинает его обрабатывать;
1) в этот момент получает второй сигнал на этот-же слот.
Вопрос: что делает объект - довершает обработку этого сигнала? как я понимаю это стандартный режим.
2) в этот момент поступает сигнал на другой слот
Вопрос: объект все равно будет обрабатывать этот сигнал а потом перейдет к обработке второго или можно запустить 2 обработки одновременно?
3) в связи с этим третий вопрос -
как управлять такой параллельной обработкой поступающих сигналов...
можно-ли прервать обработку предыдущего сигнала и начать обработку нового или запустить параллельно 2 обработки
и т.п.
предположим (гипотетически) что мне надо настроить такое поведение что-бы обработка текущего сигнала прекращалась и начиналась обработка нового сигнала?
где рыть и что читать?
или я вообще в корне не верно понимаю механизмы слот-сигнал.
QT4: "очередь сигналов"... ? (параллельная обработка сигналов?)
Модератор: Модераторы разделов
-
Denjs
- Сообщения: 1685
- ОС: SuSe 10.2
-
Uncle_Theodore
- Сообщения: 3339
- ОС: Slackware 12.2, ArchLinux 64
Re: QT4: "очередь сигналов"... ?
Ну, начни отсюда читать...
http://doc.trolltech.com/qq/qq14-threading.html
http://doc.trolltech.com/qq/qq14-threading.html
-
Alxn1
- Сообщения: 402
- Статус: Красноглазик со стажем
- ОС: Mavericks
Re: QT4: "очередь сигналов"... ?
Вообще, если вы не создаёте дополнительных нитей (Threads) и не генерируете из них сигналов, то весь этот механизм работает (по-идее должен) в одной нити, т.е. вышеописанных вами ситуаций быть не может. В случае многопоточности на эту тему в 4-м Qt почти все классы и их функции реинтерабельны, т.е. могут выполняться в нескольких нитях паралельно, не мешая другим экземплярам. И ваши обработчики тоже по-возможности должны быть реинтерабельными. Если это невозможно, то следует использовать различные механизмы синхронизации нитей, такие как семафоры и мьютексы. Но что-то мне подсказывает, что у вас поток один, потому можно просто положиться на механизм слотов-сигналов. 
-
v04bvs
- Сообщения: 636
- ОС: Debian GNU/Linux
Re: QT4: "очередь сигналов"... ?
Qt4 source
Модель: объект получает сигнал, начинает его обрабатывать;
1) в этот момент получает второй сигнал на этот-же слот.
Такого не бывает. У каждого потока есть такая штука, назвыается event loop. В нём он спрашивает "а не пришли ли мне какие-нибудь события?" если пришли - последовательно вызываем все слоты, подписанные на это событие. Потом вытаскиваем следующее событие и т.д. Всё линейно, даже в случае многопоточности.
как управлять такой параллельной обработкой поступающих сигналов...
Надеюсь, я ответил на ваш вопрос. Если есть сомнения - рекомендую изучить исходный код Qt в этой области.
предположим (гипотетически) что мне надо настроить такое поведение что-бы обработка текущего сигнала прекращалась и начиналась обработка нового сигнала?
Вряд ли это можно сделать по-нормальному, и уж точно этого не нужно делать.