Как обрабатывать сигналы/ожидание внутри QThread?

Я создал простой многопоточный сетевой сервер. main.cpp вызывает app.exec() для бездействия, и поток срабатывает, как и ожидалось, как только я устанавливаю соединение.

В функции run() потока я подключаю сигнал от readyRead к слоту readCommand:

connect(tcpSocketPtr, SIGNAL(readyRead()), this, SLOT(readCommand()) );

и я определил readCommand в файле .h для класса как «частный слот», поскольку он вызывается только внутри класса. Надеюсь, это правильно.

после подключения выше функция run() возвращается. Нет вызова app.exec() или чего-то еще. Может ли это быть проблема? Должен ли я вызывать какую-то функцию, чтобы заставить поток прослушивать сигналы?

Когда я отправляю текст в порт, функция readCommand никогда не срабатывает... и я понятия не имею, как это отлаживать... предложения?


person TSG    schedule 27.09.2013    source источник
comment
Вам нужно вызвать QThread::exec() внутри тела run(), чтобы запустить цикл событий потока. В противном случае поток завершится по достижении конца run().   -  person RA.    schedule 27.09.2013
comment
@ Мишель: по какой причине ты не выбрал ответ? Чего не хватает в ответе?   -  person lpapp    schedule 16.11.2013
comment
Это все еще не решено более чем через год??   -  person lpapp    schedule 21.12.2014
comment
Это решено, но единственный ответ с проверкой принятия неверен...   -  person TSG    schedule 21.12.2014


Ответы (1)


и я определил readCommand в файле .h для класса как «частный слот», поскольку он вызывается только внутри класса. Надеюсь, это правильно.

Да, это выглядит правильно.

Однако вы должны использовать int QThread::exec() [protected] внутри метода void QThread::run() [virtual protected], чтобы запустить выполнение потока, а не возвращаться почти мгновенно.

person lpapp    schedule 27.09.2013