Несмотря на то, что нигде не используется std::thread
или QThread
, по-прежнему возникают следующие проблемы:
- Всегда журнал ошибок отладки во время выполнения из Qt:
#P2#
- Периодический сбой при методе
TcpSocket::flush()
;
я использую этот метод, чтобы убедиться, что TCP записывается немедленно; Теперь иногда приложение вылетает именно по этому методу сSIGPIPE
При поиске в Интернете обнаружил, что люди предполагают, что для устранения 1-й проблемы (то есть мета-ошибки) мне нужно зарегистрироваться, используя qRegisterMetaType()
, когда у нас есть несколько потоков.
Та же многопоточность также упоминается как причина для 2-й проблемы; см. это и это.
Но у меня не более 1 потока!
Код моего сокета выглядит следующим образом:
struct Socket : public QSslSocket
{
Q_OBJECT public:
void ConnectSlots ()
{
const auto connectionType = Qt::QueuedConnection;
connect(this, SIGNAL(readyRead()), this, SLOT(ReceiveData()), connectionType);
connect(this, SIGNAL(disconnected()), this, SLOT(Disconnected()), connectionType);
connect(this, SIGNAL(error(QAbstractSocket::SocketError)),
this, SLOT(Error(QAbstractSocket::SocketError)), connectionType);
// ^^^^^^^ error comes whether I comment this or not
}
public slots:
void ReceiveData () { ... }
void Disconnected () { ... }
void Error () { ... }
}
Вопрос: создает ли Qt какой-либо внутренний поток для чтения/записи? (Надеюсь нет). Как исправить выше 2 проблемы?
int
вместо типа enum в соединении сигнал/слот. т.е....SLOT(Error(int)...
, если вы не хотите заморачиваться с метасистемой Qt и правильно приводить параметры к значениям перечисления в вашем слоте. - person vahancho   schedule 13.07.2017QAbstractSocket::SocketError
дляError
или весь вызов дляconnect
? - person G.M.   schedule 13.07.2017Error(int)
, то возникнет ошибка несовместимого типа: QObject::connect: Несовместимые аргументы отправителя/получателя. Connection::Socket::error(QAbstractSocket::SocketError) --› Connection::Socket::Error(int). Предположим, что если я удалю аргумент и сделаю егоError()
, то фактическая проблема, упомянутая в Qn, все еще сохраняется. - person iammilind   schedule 13.07.2017QueuedConnection
эта часть была решена. - person iammilind   schedule 13.07.2017