У меня соединение QLocalSocket
, и я пытаюсь получить сигнал readyRead
, когда данные доступны. Все отлично работает, если я запускаю весь код в одном потоке. Но если я запустил команду connectToServer
в отдельном потоке, то этот readyRead
сигнал никогда не испускается (или, возможно, просто никогда не получен).
Конструктор класса главного окна, упрощенный:
server = new ServerConn();
connect(server->socket, SIGNAL(connected()), this, SLOT(socketConnected()));
connect(server->socket, SIGNAL(disconnected()), this, SLOT(socketDisconnected()));
connect(server->socket, SIGNAL(readyRead()), this, SLOT(socketDataRead()));
connect(
server->socket,
QOverload<QLocalSocket::LocalSocketError>::of(&QLocalSocket::error),
this,
&MainWindow::socketError
);
В моем классе ServerConn у меня есть этот метод для подключения к сокету:
void ServerConn::Connect() {
qDebug("ServerConn::Connect");
socket->abort();
socket->connectToServer("\\\\.\\pipe\\ICS0025", QIODevice::ReadWrite);
if (!socket->waitForConnected(5000)) {
qWarning(socket->errorString().toUtf8());
}
}
Из моего класса главного окна я пытаюсь sh установить соединение с сокетом, а затем иметь возможность получать сигналы. Это на 100% отлично работает, если я сохраню все в одном потоке. Но если я попытаюсь подключиться в другом потоке, я не получу все сигналы.
QtConcurrent::run([this](){
server->Connect();
});
Если я подключаюсь к сокету с помощью этого вызова, я не получаю disconnect
и readyReady
сигналов. Я все еще могу писать в сокет и получаю сигнал connected
, но это все.
Если я уберу QtConcurrent::run([this](){
обертку вокруг вызова server->Connect
, все будет работать отлично.
Что мне делать, чтобы иметь возможность постоянно принимать все сигналы?