Это мой код поток C < /p>
Код: Выделить всё
void SCANSAVER::onReadyRead()
{
QByteArray data = socket->readAll();
controlBuffer.append(data);
// Process control messages line by line (terminated by '\n')
int newlineIndex;
while ((newlineIndex = controlBuffer.indexOf('\n')) >= 0) {
QByteArray line = controlBuffer.left(newlineIndex);
controlBuffer.remove(0, newlineIndex + 1);
QString str = QString::fromUtf8(line).trimmed();
if (str.startsWith("PATH:")) {
QStringList parts = str.split(';');
for (const QString &part : parts) {
if (part.startsWith("PATH:")) {
m_basePath = part.mid(5).trimmed();
qDebug() state() == QAbstractSocket::ConnectedState) {
socket->disconnectFromHost();
if (socket->state() != QAbstractSocket::UnconnectedState) {
bool disconnected = socket->waitForDisconnected(3000); // Increased timeout
if (!disconnected) {
socket->abort(); // Force close if graceful disconnect fails
}
}
} else if (socket->state() != QAbstractSocket::UnconnectedState) {
socket->abort(); // Force close for any non-disconnected state
}
socket->close();
socket->deleteLater();
socket = nullptr;
}
if (server) {
server->close();
server->deleteLater();
server = nullptr;
}
}
Thread B code
PROCESSFRAME::PROCESSFRAME(QObject *parent)
: QThread{parent}, image(3072, line_in_projection, QImage::Format_Grayscale16), currentLine(0)
{
socket = new QTcpSocket(this);
retryTimer = new QTimer(this);
retryTimer->setInterval(500); // retry every 500 ms
retryTimer->setSingleShot(true);
connect(socket, &QTcpSocket::connected, [](){
qDebug() state() == QAbstractSocket::ConnectedState ||
socket->state() == QAbstractSocket::ConnectingState)
return; // already connected or connecting
socket->abort(); // cancel any previous attempt
socket->connectToHost(QHostAddress::LocalHost, 12345);
if (!socket->waitForConnected(100)) { // non-blocking short wait
qWarning() start();
}
}
void PROCESSFRAME::SendSavePath(QString path, int dualEnergy)
{
if (socket->state() == QAbstractSocket::ConnectedState) {
QByteArray msg = "PATH:" + path.toUtf8() + ";DUAL:" + QByteArray::number(dualEnergy) + "\n";
socket->write(msg);
socket->flush();
qDebug() write(msg);
socket->flush();
qDebug()
Подробнее здесь: [url]https://stackoverflow.com/questions/79754019/tcp-connect-failing-after-restarting-application[/url]
Мобильная версия