Threads und Signal/Slot
Verfasst: 2. September 2009 08:54
Hallo,
ich hab mich in letzter zeit etwas mit threads beschäftigt, und jetzt habe ich da eine verständnisfragen:
Laut dem threaded fortune server
Wird ja alles in der run() methode als thread ausgeführt, was passiert aber, wenn ich z.b. in dem thread auf signal warten muss und danach einen slot ausführe, wird dieser dann auch noch in dem thread ausgeführt? Denn ich möchte das alles was mit dieser "eingehenden verbindung" passiert in einem thread abgearbeitet wird.
Als beispiel:
Ich weiß das exec() eine eigene event loop startet, macht mein code genau das was ich möchte?
Danke!
Mfg Bert
ich hab mich in letzter zeit etwas mit threads beschäftigt, und jetzt habe ich da eine verständnisfragen:
Laut dem threaded fortune server
Code: Alles auswählen
FortuneThread::FortuneThread(int socketDescriptor, const QString &fortune, QObject *parent)
: QThread(parent), socketDescriptor(socketDescriptor), text(fortune)
{
}
void FortuneThread::run()
{
QTcpSocket tcpSocket;
if (!tcpSocket.setSocketDescriptor(socketDescriptor)) {
emit error(tcpSocket.error());
return;
}
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_0);
out << (quint16)0;
out << text;
out.device()->seek(0);
out << (quint16)(block.size() - sizeof(quint16));
tcpSocket.write(block);
tcpSocket.disconnectFromHost();
tcpSocket.waitForDisconnected();
}
Als beispiel:
Code: Alles auswählen
FortuneThread::FortuneThread(int socketDescriptor, const QString &fortune, QObject *parent)
: QThread(parent), socketDescriptor(socketDescriptor), text(fortune)
{
}
void FortuneThread::run()
{
connect(tcpSocket, SIGNAL(readReady()), this, SLOT(readData()));
exec();
}
FortuneThread::readData()
{
//...
//read data from socket
//...
}
Danke!
Mfg Bert