【发布时间】:2014-10-12 17:03:57
【问题描述】:
我编写了一个简单的 HTTP 服务器,它获取一个 PUT 请求处理它并返回一个答案。当我阅读请求文本时一切正常,但是当我写回响应时,我收到这样的警告 QObject: Cannot create children for an parent that is in a different thread。 (Parent是QNativeSocketEngine(0x7ffffe0003950),parent的线程是Htt(0x7fffffffe6f0),当前线程是QThread(0x6128b0) 服务器代码
#include "Htt.h"
Htt::Htt()
{
}
void Htt::run() {
m_server = new QTcpServer();
m_server->listen(QHostAddress::Any, 56789);
connect(m_server, SIGNAL(newConnection()), SLOT(ConnectClient()));
exec();
}
void Htt::ConnectClient() {
m_client = m_server->nextPendingConnection();
connect(m_client, SIGNAL(readyRead()), SLOT(CitesteDate()));
}
void Htt::ReadData() {
QByteArray data = m_client->readAll();
SendRespond();
}
void Htt::SendRespond() {
QByteArray codSucces = "HTTP/1.1 200 OK\r\n\r\n";
m_client->write(codSucces);
m_client->close();
}
这是这个类的标题
#ifndef HTT_H
#define HTT_H
#include <QThread>
#include <QTcpServer>
#include <QTcpSocket>
class Htt : public QThread
{
Q_OBJECT
private:
QTcpServer *m_server;
QTcpSocket *m_client;
void SendRespond();
private slots:
void ConnectClient();
void ReadData();
public:
Htt();
void run();
};
#endif // HTT_H
感谢您的帮助!!!
【问题讨论】:
-
看过了,但不是很懂。在那里我需要创建一个 QThread 类型的对象并在那里移动一个客户端并调用线程的开始,但是线程的 run 方法的实现在哪里?
-
这只是一种预感。我有这种类型的错误,但在我将 QTcpSocket* 更改为 QTcpSocket 后它消失了。尝试将类中的指针更改为对象。
-
好的,我今天试试,把结果写出来。谢谢各位!!
标签: c++ multithreading qt http