Просмотр сообщений
|
Страниц: [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 байт? В чем различие типов?
|
|
|
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 ? Каждый должен иметь свой коннект или должен быть отдельный поток для выполнения всех запросов?
Буду рад любым полезным ссылкам и советам.
|
|
|
|
|