Russian Qt Forum
Апрель 28, 2024, 20:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: [1]
1  Qt / Многопоточное программирование, процессы / Сохранение работы основного потока при падении дополнительных. : Июнь 13, 2021, 11:00
Доброе время суток, Уважаемы гуру, прошу подсказать принцип организации стабильного консольного приложения на сервере.
Имеется три потока
 - "стабильный" основной поток запускающий остальные
 - поток со "стабильным" не меняемым кодом собирает информацию и должен работать при падении третьего
 - поток с нестабильным изменяемым и сложным кодом в котором возможно падение.

Какие есть механизмы для контроля и перезапуска третьего потока при падении, при условии постоянной работы второго потока ?
2  Qt / Вопросы новичков / Re: quint16 uint16_t : Декабрь 28, 2020, 13:55
и я бы еще завернул структуры в pragma pack и их аналоги. чтобы точно знать что будет передано то что надо.

и датастрим тут избыточен, имхо.
В моем случае пакет всегда одной длинны, это связано с ограничением клиента на микроконтроллере, он джет всегда 48 байт, в котором есть заголовок, и контрольная сумма.
Как у начинающего Qtиста инструкция датастрим не вызывает доверия, проверить размер отправки можно только через отладку, непонятно насколько она будет задерживать отправку простых сообщений.
3  Qt / Вопросы новичков / Re: quint16 uint16_t : Декабрь 28, 2020, 13:46
Лучше использовать QDataStream и более того переводить все данные с учетом сетевого порядка байт (big endian). Кстати в QDataStream он используется по умолчанию.
Это хорошая практика. Формирование пакетов через QDataStream не добавляет каких-то значимых издержек.

   
Код:
QByteArray errorByteArr;
    QDataStream out(&errorByteArr, QIODevice::WriteOnly | QIODevice::Append);
    out.setByteOrder(QDataStream::BigEndian);
    out << (quint8) STM32_PACK_TITLE;
    out << (quint8) STM32_PACK_SIZE;
    out << (quint16) 0x0000;
    out << (quint8) 0xFF;
    out << (quint16) errorCode;
...................
socketClient.write(errorByteArr,STM32_PACK_SIZE);



Вы имеете в виду такую конструкцию ? будет ли она производительной?

Отдельно хотел спросить, как лучше построить очередь на отправку , если процедура отправки вызвана повторно до ее завершения (две параллельные отправки в одном сокете ) ?
4  Qt / Вопросы новичков / Re: quint16 uint16_t : Декабрь 28, 2020, 09:52
различий нет, просто некоторые платформы могут не знать о uintX_t.

Другая сторона 32 битный микроконтроллер ARM, код на С. Qt типов там нет, мне нужно понимать могу ли я использовать однотипные массивы с обоих сторон?  а данные передавать блоком из байт который равен размеру структуры.
5  Qt / Вопросы новичков / Re: quint16 uint16_t : Декабрь 28, 2020, 09:47
Наверно Вы хотели спросить типа "будет ли корректно работать memmove или memcpy для быстрого присваивания".
Мне нужно передавать по сети огромное количество пакетов по 48 байт, конструкция QDataStream мне кажется избыточной.
Хочется просто заливать структуру в QByteArray и отправлять в сокет, тоже при приеме в обратном порядке.
Другого способа быстрого наполнения массивов структур не нашел.
6  Qt / Вопросы новичков / quint16 uint16_t : Декабрь 27, 2020, 11:29
Клиент на микроконтроллере (STM32) имеет такой тип , размер 12 байт
struct uidType{
    uint16_t uid1 = 0;
    uint16_t uid2 = 0;
    uint32_t uid3 = 0;
    uint32_t uid4 = 0;
};

На сервере QT тип : (windows , linux)

struct uidType2{
    quint16 uid1 = 0;
    quint16 uid2 = 0;
    quint32 uid3 = 0;
    quint32 uid4 = 0;
};

можно ли его просто заполнять пакетом 12 байт? В чем различие типов?
7  Qt / Вопросы новичков / Re: QTcpSocket readyRead в потоке класса QObject : Декабрь 13, 2020, 19:47
Спасибо, новый метод указал на ошибку подробно, все заработало.
8  Qt / Вопросы новичков / QTcpSocket readyRead в потоке класса QObject : Декабрь 13, 2020, 16:46
Доброе время суток , передаю в поток объект и создаю в нем клиента QTcpSocket, на отправку работает.
Ни как не получается подписаться на readyRead() , насколько понимаю связанно это с типом объекта, как быть ?

Вызов:
Код:
    QThread *socketThread = new QThread();
    socketTcpIp *socketObj = new socketTcpIp();
    socketObj->moveToThread(socketThread);
    connect(socketThread, &QThread::started, socketObj,  &socketTcpIp::init);
    socketThread->start()

H файл
Код:
#ifndef THREADIPCLIENT_H
#define THREADIPCLIENT_H

#include <QObject>
#include <QTcpSocket>

class socketTcpIp : public QObject
{
    Q_OBJECT
   
     
protected:
      virtual void statstateChanged();
      virtual void readyRead();

private:
      QString clientName;

public:
   
      QTcpSocket* socket = 0;

public slots:
      void init();

};

#endif // THREADIPCLIENT_H

cpp файл

Код:
socketTcpIp::socketTcpIp(QObject *parent) :   QObject(parent)
{

}

void socketTcpIp::init()
{
    socket = new QTcpSocket(this);
}

void socketTcpIp::readyRead()
{
    qDebug() << "ОК";
}

пробовал так
Код:
connect(socket,SIGNAL(readyRead()),this,SLOT(ready_Read()));
вызывают такую ошибку
Код:
error: called object type 'socketTcpIp:: is not a function or function pointer
9  Qt / Вопросы новичков / Многопоточность в SQLite : Декабрь 10, 2020, 17:30
Доброе время суток.
Имеется простой многопоточный TCP-I сервер собранный по мануалам Qt5
QObject->QThread->WOrker->Clients

Как клиентов из сокетов подключать к SQLite ?
Каждый должен иметь свой коннект или должен быть отдельный поток для выполнения всех запросов?

Буду рад любым полезным ссылкам и советам.

10  Qt / Вопросы новичков / Re: Иконка на ПАПКУ в диспетчере задач Windows 10 : Декабрь 08, 2020, 19:41
Собрал иконку из трех картинок и все заработало само.
Инструкция здесь https://doc.qt.io/qt-5/appicon.html
11  Qt / Вопросы новичков / Иконка на ПАПКУ в диспетчере задач Windows 10 : Декабрь 08, 2020, 14:14
Доброе время суток, не удается установить иконку на папку с программой ?
удается только на саму программу в профайле
Код:
win32:RC_ICONS = cube.ico
Есть ли в QT5 возможность установить на папку в дереве? 


Страниц: [1]

Страница сгенерирована за 0.054 секунд. Запросов: 24.