Socketverbindung ohne Signal/Slot

Alles rund um die Programmierung mit Qt
Antworten
flownfluid
Beiträge: 80
Registriert: 6. Januar 2005 12:54

Socketverbindung ohne Signal/Slot

Beitrag von flownfluid »

Hallo zusammen,
ich probiere eine Socketverbindung aufzubauen ohne Signal und Slots zu verwenden. Aber irgendwie mach ich dort einen Denkfehler.

momentane Situation:
MyHost
MyObserveClients : QTcpServer,QThread
MySocket

MyObserveClients:

Code: Alles auswählen

MyObserveClients ::MyObserveClients ()
{
  QTcpServer::moveToThread(this);
}

void MyObserveClients ::run()
{
  while(1)
  {
    if(waitForNewConnection(-1))
    {
      while(hasPendingConnections ())
      {
        m_TcpClients.push_back(nextPendingConnection());
      }
    }
  }
}

QTcpSocket* TcpServerObservClients::getNewSocket()
{
  QTcpSocket* l_NewSocket = 0;
  if(!m_TcpClients.empty())
  {
    l_NewSocket = m_TcpClients.front();
    m_TcpClients.pop_front();
  }
  return  l_NewSocket;
}
MyHost:

Code: Alles auswählen

void TcpServer::cyclicUpdate()
{
  while(m_Server != 0 &&
        m_Server->isASocketAvailable())
  {
    QTcpSocket* l_Socket = m_Server->getNewSocket();
    if(l_Socket != 0)
    {
      TcpSocket* op_tcpSocket = new TcpSocket();

      op_tcpSocket->connectToClient(l_Socket);
      m_TcpSockets.push_back(op_tcpSocket);
    }
  }
      //for each socket call cyclicUpdate and do some works...
}
so nun zu meinem Problem:
In einem Thread(MyObserverClients) läuft der QTcpServer und speichert alle eingehenden Sockets. MyHost wird von einem Programm zyklisch aufgerufen, dieser kontrolliert ob es neue Clients in MyObserverClients exsistieren und falls ja erstellt er ein MySocket und übergibt ihm den QTcpSocket.

Beim QTcpServer beim hohlen einer neuen Socketverbindung kam eine Fehlermeldung <<QObject: Cannot create children for a parent that is in a diffrent thread.>>
Also hab ich im Ctor bei MyObserveClients ein moveToThread(this) eingebaut. So war nun die Fehlermeldung weg...
Doch beim Speichern des QTcpServer im MyHost ergibt nochmals die gleiche Fehlermeldung...
Wie krieg ich das eigentlich weg?

Ich hoffe das es ein wenig verständlich ist und das jemand eine Idee hat.

Schon mal vielen Dank im voraus

ach übrigens, die Synchronisation hab ich weggelassen das es weniger Code ist...
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

1. Warum keine Signals/Slots?
2. Du hast von QThread und QTcpServer abgeleitet?
3. Doku zu QThread lesen, vor allem de Abschnitt wo gesagt wird in welchem Thread was läuft.
4. wo wird TcpServer::cyclicUpdate() aufgerufen? Vor allem von welchem Thread aus?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten