为什么QTimer的每个时钟都会创建新的线程?我的应用程序需要尽可能长时间运行,但是在蜱的xx冻结之后,它仍然在运行(它正在响应),但是下一个蜱不会执行。我看着调试信息,我看到:Qt新线程是否每次打勾创建?
的QThread ::开始:无法创建线程()的QThread ::开始:无法创建 ()线程的QThread ::开始:无法创建线程() QThread的::开始:无法创建线程()的QThread ::开始:无法创建 ()线程的QThread ::开始:无法创建线程() 的QThread ::开始:无法创建线程()的QThread ::启动:未能 创建线程()
waat?
蜱每隔XX秒执行时,信号被定位到QWidged(这是TabWidget的选项卡的一个)
namespace Ui {
class accountTab;
}
class accountTab : public QMainWindow
{
Q_OBJECT
public:
explicit accountTab(QWidget *parent = 0);
class player *_player;
~accountTab();
private slots:
void on_clean_timer_clicked();
public:
Ui::accountTab *ui;
};
void accountTab::on_clean_timer_clicked()
{
if(user->timers.value("clean")->isActive()) {
_player->timers.value("clean")->stop();
}
else if(!user->timers.value("clean")->isActive()) {
_player->timers.value("clean")->start(1800000); //900000
}
}
_player是一个简单的类。 _player-> clean()执行一些静态类,它们是try/catched。
player.h
class player : public QObject
{
Q_OBJECT
public:
player();
~player();
player(Ui::accountTab *tab, std::string login, std::string password);
player(Ui::accountTab *tab, User user);
public:
bool logIn();
Ui::accountTab *tab = new Ui::accountTab();
public slots:
void clean();
private:
User user;
QMap<std::string, QTimer*> timers;
void initializeTimers();
};
player.cpp播放器类
player::player(Ui::accountTab *tab, std::string login, std::string password)
{
this->tab = tab;
this->user.login = login;
this->user.password = password;
}
player::~player()
{
delete this->manager;
delete this->tab;
}
bool player::logIn()
{
...
Log::writeLog("Login completed!", *this);
return true;
}
bool player::setup(bool saved, bool save)
{
if(!this->logIn())
return false;
Packets::sendPacket("getSimulation", *this);
this->initializeTimers();
return true;
}
void player::initializeTimers()
{
this->timers.insert("clean", new QTimer(this));
connect(this->timers.value("clean"), SIGNAL(timeout()), this, SLOT(cleanZoo()));
}
void player::clean()
{
Packets::sendPacket()
}
用户类别不断登录名和密码。 定时器是一个QMap:QMap定时器; 包::命令sendpacket()是
QString httpManager::sendPacket()
{
QNetworkRequest request("https://www.google.pl/");
if(headers.size() > 0) {
for (QMap<const char*, const char*>::iterator i = headers.begin(); i != headers.end(); ++i)
request.setRawHeader(i.key(), i.value());
}
QNetworkAccessManager *manager = new QNetworkAccessManager();
manager->setCookieJar(this->cookies);
QNetworkReply *reply = manager->get(request);
QEventLoop loop;
QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
QList<QNetworkCookie> cookies = reply->manager()->cookieJar()->cookiesForUrl(QUrl(reply->url()));
foreach(QNetworkCookie cookie, cookies)
{
this->cookies->insertCookie(cookie);
}
return reply->readAll().data();
}
QEventLoop执行得到在同一无效响应静态无效
和功能sendpacket()。这是否创建新线程?
QTimer不会创建任何线程,你的情况别的东西一样。此外,它看起来像你已经发布了一些无关的代码(我没有在这里看到任何计时器)。 – Archie
我的不好,我更新了代码,你可以再检查一次吗? –
定时器运行发送数据包的代码,并>
user1095108