Despite not using std::thread
or QThread
anywhere, still getting following problems:
- Always a runtime debug error log from Qt:
QObject::connect: Cannot queue arguments of type 'QAbstractSocket::SocketError'
(Make sure 'QAbstractSocket::SocketError' is registered using qRegisterMetaType().) - Intermittent crash on
TcpSocket::flush()
method;
I use this method to make sure that the TCP is written immediately; Now sometimes the app crashes exactly at this method withSIGPIPE
Upon searching internet, found that people suggest that to fix 1st problem (i.e. the meta error), I need to register using qRegisterMetaType()
, when we have multiple threads.
Same multithreading is referred as a cause for the 2nd problem as well; see this and this.
But I don't have more than 1 thread!
My socket code looks like below:
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 () { ... }
}
Question: Is Qt creating any internal thread by itself for read/write purpose? (I hope not). How to fix above 2 issues?
int
instead of enum type in your signal/slot connection. I.e....SLOT(Error(int)...
if you don't want to bother yourself with Qt meta system, and properly cast parameters to enum values in your slot. – vahanchoQAbstractSocket::SocketError
parameter toError
or the entire call to toconnect
? – G.M.Error(int)
then there is an error of incompatible type: "QObject::connect: Incompatible sender/receiver arguments. Connection::Socket::error(QAbstractSocket::SocketError) --> Connection::Socket::Error(int)". Suppose if I remove argument and make itError()
, then the actual problem mentioned in Qn still persists. – iammilindQueuedConnection
that part was resolved. – iammilind