Socketverbindung ohne Signal/Slot
Verfasst: 16. März 2010 13:46
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:
MyHost:
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...
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;
}
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...
}
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...