![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
bo0blik |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 27 Регистрация: 13.9.2009 Пользователь №: 1089 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Буду рад если кто-то поделится исходниками на эту тему, очень интересно посмотреть.
|
|
|
![]() |
rnd |
![]()
Сообщение
#2
|
Студент ![]() Группа: Участник Сообщений: 54 Регистрация: 22.7.2009 Пользователь №: 930 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
Давай отвлечемся от QNetworkAccessNanager - он тут совершенно не при чем сейчас
Смотри, есть два потока, в первом крутится obj1, во втором obj2: Thr1 | Thr2 ------ ------ Obj1 | Obj2 Первый поток эмитит два сигнала sig1, sig2 объекту, который находится во втором потоке. Obj1 ->sig1->Obj2 Obj1 ->sig2->Obj2 Соответствующие слоты(slot1, slot2) не вызываются напрямую, а в очередь Thr2 кладутся сообщения для вызова этих слотов. Дальше, Thr2 извлекает очередное сообщение, видит что это вызов слота slot1 - и вызывает его. Объект Obj2 переходит в несогласованное состояние. Внутри слота slot1 мы начинаем прокачивать сообщения (loop.exec()), Thr2 извлекает следующие сообщение из очереди - видит что это вызов слота slot2 и дергает его - опа приехали, еще не выйдя из slot1 уже запустили slot2! Callstack: ---------- slot2() ..... slot1() .... ------------ Естественно, вместо вызова слотов могут быть любые обработчики. Для того чтобы решить эту проблему - и создается дополнительный поток - Thr3. В него помещается объект и сообщения этот объект получает в нем. А вызывающие поток ждет окончания Thr3 НЕ прокачивая при этом свои сообщения. |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 11.8.2025, 20:14 |