Как я выполняю QTcpSocket в другом потоке?

Как я выполняю функции QTcpSocket в другом потоке?

6
задан Regof 23 April 2010 в 11:35
поделиться

3 ответа

Вот пример:

файл thread.h:

class   Thread : public QThread {
    Q_OBJECT
public:
    Thread();
protected:
    void    run();
}

файл thread.cpp:

Thread::Thread() {}
void    Thread::run() {
    // do what ever you want with QTcpSocket
}

в main.cpp или что-то еще:

Thread *myThread = new Thread;
connect(myThread, SIGNAL(finished()), this, SLOT(on_myThread_finished()));
myThread->start();
-4
ответ дан 17 December 2019 в 07:02
поделиться

Установите блокировку QMutex вокруг всех вызовов, не только для «другого» потока, но и для всех потоков. Один из простых способов сделать это - использовать QMutexLocker

1
ответ дан 17 December 2019 в 07:02
поделиться

В документации QT явно указано, что QTCPSocket не должен использоваться в потоках. Т.е. создайте QTCPSocket в основном потоке и привяжите сигнал к объекту в другом потоке.

Я подозреваю, что вы реализуете что-то вроде веб-сервера, где прослушивание создает QTCPSocket при приеме. Затем вам нужно, чтобы другой поток выполнял задачу обработки этого сокета. Вы не можете.

Я работал над этим так: я оставил сокет в потоке, в котором он был рожден. Я обслужил все входящие данные в этом потоке и поместил их в очередь, где другой поток мог бы работать с этими данными.

6
ответ дан 17 December 2019 в 07:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: