![]() |
|
![]() ![]() ![]() |
|
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 11 Всего: 33 |
SABROG, я тут набросал пример, и не понимаю, как я могу получить значение возвращаемое слотом, при испускании сигнала?
я даже не представляю как это описать синтаксически. сигналы/слоты в Qt ведь не объекты. в моем представлении, сигнал и слот, должны быть объектами. тогда все понятно. но в данном случае, нет.
Это сообщение отредактировал(а) andrew_121 - 11.3.2010, 03:59 -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
SABROG |
|
||||||||||||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
В этом случае сигналы даже не нужны, достаточно простого вызова слота:
Вообще использование сигналов и слотов в Qt не обязательное условие о чем тролли и пишут. Можно тот же паттерн Observer сделать. Просто нужно позаботится о мутексах или атомарных операциях, чтобы сделать его потокобезопасным.
С тем же успехом можно вообще отдельный поток не создавать. Реальная ситуация, главный поток принимает соединения от клиентов, второй поток выполняет тяжелую работу над запросом. В случае с boost::signals2 пока отдельный поток выполняет тяжелую работу основной поток не знает подключился ли кто-то еще или нет, а из-за долгого молчания сервера на клиентской стороне начинает тикать таймаут в 60 секунд. Если твой второй поток за это время не уложится, то клиент отключится даже не узнав по какой причине его не пустили на сервер.
К счастью в Qt есть выбор.
Передавай в качестве параметра сигнала указатель типа QWeakPointer и меняй значение. Сигнал испускай сам, а не через QTimer. Можно даже так сделать:
|
||||||||||||
|
|||||||||||||
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 11 Всего: 33 |
для работы с сетью и вводом-выводом(в том числе и файловым(мультиплексированым и асинхронным)) использую asio, потому такой проблемы не возникало. а вообще, если понять архитектуру asio и принцип организации, то становится ясно, почему при работе с ней, не возникает подобных проблем. а ведь в ней все основано функциональных объектах. вы часто видели в пользовательском коде такое? я нет) в общем, все зависит от требований к коду. мне крайне сложно писать что-то более или менее крупное, не используя всеобразные связыватели и шаблоны/алгоритмы. -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Не видел. Потому, что мало кто зацикливается на том, что слот или сигнал должен вернуть значение. Как я уже говорил не сигналами со слотами едиными жив C++. В asio только один плюс - Completion Port. В остальном он использует те же API и неблокирующие сокеты как и Qt. Я предложил уже троллям "допилить" модуль QtNetwork, чтобы эвенты сокетов получать через Completion Port. Пока ни ответа ни привета. |
|||
|
||||
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 11 Всего: 33 |
это, если я не ошибаюсь, толь вендовая модель? -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Да, под *nix'ы это уже другой вопрос. Но я им инфу и для *nix'ов бросил. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |