Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.58/19: Рейтинг темы: голосов - 19, средняя оценка - 4.58
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 249

СИнхронные операции с QTcpSocket

28.05.2013, 14:11. Показов 4407. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Для выполнения синхронных операций используется код
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
bool send_command( ... )
{
    QMutexLocker locker(&m_mutex);
 
    qint64 bytes = m_socket.write(...);
    if (!m_socket.waitForBytesWritten())
    {
        qCritical() << m_socket.errorString();
        return false;
    }
    Q_ASSERT(bytes == request.size());
    if (!m_socket.waitForReadyRead())
    {
        qCritical() << m_socket.errorString();
        return false;
    }
 
    QByteArray cmd = m_socket.readLine();
        ...
        return true;
}
Но проблема возникает при инициализации и использовании сокета.
Если он был создан в одном потоке, а используется в другом, то вываливается сообщение
C++ (Qt)
1
2
QSocketNotifier: socket notifiers cannot be enabled from another thread
QSocketNotifier: socket notifiers cannot be disabled from another thread
Но логика работы заключается именно в том, что рез этот сокет в отдельном потоке вычитываются
данные. Но создание его и инициализация(длительная) выполняется в другом потоке.

Как избавиться от этой проблемы ? moveToThread ?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.05.2013, 14:11
Ответы с готовыми решениями:

Синхронные/асинхронные операции
Подскажите примерный паттерн для приостановки скажем бесконечного цикла, который уже запущен каким либо событием с формы. Используя async...

Чем синхронные операции отличаются от асинхронных?
по сути асинхронная операция, это та которая как багроундворкер будет выполняться в фоновом режиме и форма не будет заблокирована пока...

Синхронные ScrollBox'ы
На форме лежат скроллбоксы, как сделать чтобы при прокрутке одного (вертикально, горизонтально) автоматом прокручивался и второй, ну и...

29
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
28.05.2013, 15:23
Студворк — интернет-сервис помощи студентам
А зачем инкапсулировать сокет в в поток ? Когда он и так асинхронный ?
0
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 249
28.05.2013, 15:25  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
А зачем инкапсулировать сокет в в поток ? Когда он и так асинхронный ?
потому, что я не смог реализовать асинхронный протокол и решил заставить его работать синхронно
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
28.05.2013, 15:27
Цитата Сообщение от xbarmaglot Посмотреть сообщение
потому, что я не смог реализовать асинхронный протокол и решил заставить его работать синхронно
Приехали

асинхронный протокол
нет такого ...
0
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 249
28.05.2013, 15:28  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Приехали


нет такого ...
а что не так ?
0
28.05.2013, 15:39

Не по теме:

:popcorn:

0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
28.05.2013, 15:44
все 3 страницы не читал, но по теме вопроса могу сказать следующее:
в потоке сокета отправлять сигнал потоку "считывателю", данные складывать можно в общий для этих потоков буфер, но пеерд использованием этого буфера лочить его мутексами.
0
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 249
28.05.2013, 15:47  [ТС]
Цитата Сообщение от oxotnik Посмотреть сообщение
все 3 страницы не читал, но по теме вопроса могу сказать следующее:
в потоке сокета отправлять сигнал потоку "считывателю", данные складывать можно в общий для этих потоков буфер, но пеерд использованием этого буфера лочить его мутексами.
то есть общая очередь. Отправил пакет и ждешь ответа из очереди ?
А если 2 запроса одинаковых - как понять какой из 2-х ответов твой?
Вводить id пакета ?
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
28.05.2013, 15:50
Цитата Сообщение от xbarmaglot Посмотреть сообщение
то есть общая очередь. Отправил пакет и ждешь ответа из очереди ?
я не в курсе логики, которую надо сделать. Что понял из 1-го поста, на то и ответил.
Цитата Сообщение от xbarmaglot Посмотреть сообщение
А если 2 запроса одинаковых - как понять какой из 2-х ответов твой?
В слот приходит sender() по косвенным признакам можно определить кто испустил сигнал.
0
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 249
28.05.2013, 19:54  [ТС]
В общем понял, что не стоит мутить с потоками, а лучше использовать сигналы-слоты.
Открою тогда новую тему, а в этой уже ничего не понятно
0
28.05.2013, 19:56

Не по теме:

Я же говорю приехали :D, станция конечная ...

1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.05.2013, 19:56

Синхронные двигатели
В политехе на лабораторных работах по электрическим машинам запускали синхронные движки с числом оборотов 3000 в минуту. Снимали всякие...

Синхронные запросы
Добрый вечер! Кто знает как &quot;убить&quot; синхронные запросы? У меня в консоли выходит сообщение что у меня данные передаются сихронно ...

Синхронные сокеты и таймаут
Решил соорудить небольшой наколенный многопоточный клиент dht . Есть некоторые вопросы по сокетам и гугол как-то больше молчит . ...

Автоматы синхронные и асинхонные
Синхронный автомат программы не запускаются. по мойму я что-то с дужками напутала. помогите пожалуйсто довести её до робочего...

Синхронные действия со стилем
В данном коде при наведении на ссылку работает только картинка, фон не меняется &lt;td class=&quot;td6_title&quot; id=&quot;com&quot;&gt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru