Hi all

I wrote routines in a form using a QTCpSocket and a QTimer
to receive a non stop data stream from a server and write data from buffer in a different file each minute. It worked fine in the dialog form.

So i tried to write a thread class involving a QSocket and a QTimer too.
I would like to run multiple threads without freezing the user interface.
My thread runs well but events are never fired...
The code compiles well, but returns the following messages on execution :

QObject: Cannot create children for a parent that is in a different thread.
Object::connect: No such slot ThreadReception::readStream()
Object::connect: No such slot ThreadReception::displayError(QAbstractSocket::Soc ketError)
QObject: Cannot create children for a parent that is in a different thread.
Object::connect: No such slot ThreadReception::topMinute()
ecc.
Qt Code:
  1. class ThreadReception : public QThread
  2. {
  3. Q_OBJECT
  4.  
  5. public:
  6.  
  7. ThreadReception(QObject *parent = 0);
  8. ~ThreadReception();
  9.  
  10. bool connectSource();
  11. void unconnectSource();
  12.  
  13. QMutex threadMutex;
  14.  
  15. QTcpSocket *tcpSocket;
  16. QTimer *timerHorloge;
  17.  
  18. (...)
  19.  
  20. private:
  21. void readStream();
  22. void topMinute();
  23. void saveMinuteBuffer();
  24.  
  25. protected:
  26. void run();
  27. void attente();
  28.  
  29. };
  30.  
  31.  
  32. void ThreadReception::run()
  33. {
  34. tcpSocket = new QTcpSocket(this);
  35. connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(readStream()), Qt::DirectConnection);
  36. connect(tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(displayError(QAbstractSocket::SocketError)), Qt::DirectConnection);
  37.  
  38. //initialise un timer
  39. timerClock = new QTimer(this);
  40. connect(timerClock, SIGNAL(timeout()), this, SLOT(topSeconde()), Qt::DirectConnection);
  41. timerHorloge->start(1000); //1 seconde
  42.  
  43. exec();
  44.  
  45. }
To copy to clipboard, switch view to plain text mode 

i modified my code as below. first messages relative to the "parent thread" have disappeared but now i get the following messages

QObject::connect: Cannot connect QTcpSocket::readyRead() to (null)::readStream()
QObject::connect: Cannot connect QTcpSocket::error(QAbstractSocket::SocketError) to (null)::displayError(QAbstractSocket::SocketError)
QObject::connect: Cannot connect QTimer::timeout() to (null)::topMinute()
Qt Code:
  1. void ThreadReception::run()
  2. {
  3. tcpSocket = new QTcpSocket(0);
  4. connect(tcpSocket, SIGNAL(readyRead()), 0, SLOT(readStream()), Qt::DirectConnection);
  5. connect(tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)), 0, SLOT(displayError(QAbstractSocket::SocketError)), Qt::DirectConnection);
  6.  
  7. //initialise un timer
  8. timerClock = new QTimer(0);
  9. connect(timerClock, SIGNAL(timeout()), 0, SLOT(topSeconde()), Qt::DirectConnection);
  10. timerHorloge->start(1000); //1 seconde
  11.  
  12. exec();
  13.  
  14. }
To copy to clipboard, switch view to plain text mode 

What is wrong ? Has someone any idea ?

Best regards