gpt4 book ai didi

c++ - QTimer每秒执行一次方法

转载 作者:行者123 更新时间:2023-11-30 03:01:52 29 4
gpt4 key购买 nike

我正在学习 Qt,我正在阅读 Qt wiki 中有关线程、事件和 QObject 的内容,并遵循了关于如何在一段时间内处理某些工作的 wiki 建议,但它不适用于我的特定情况。这是我目前正在努力实现的一个简单示例。

class FooEvents : public FooWrapper {

public virtual serverTime(..) { std::cout << "Server time event\n"; }
public virtual connected(..) { std::cout << "Connected event\n"; }
}

class Foo : public QObject {

private:

FooAPI *client;

public:


Foo(FooEvents *ev, QObject *parent = 0) : client(new FooApi(ev)) { .. }

private slots:
void processMessages() {

if (state is IDLE)

reqFooAPiServerTime();

select(client->fd()+1, ...);

if (socket is ready for read)

client.onReceive();

}
public:
void connect(...) {

if (connection) {

QObject::connect(&timer, SIGNAL(timeout()), this, SLOT(processMessages()));
timer.start(1000); // I don't get the output from FooEvents

}

}

}

这很简单,但我认为它说明了我的情况。为什么这不起作用,还有什么其他替代方法可以处理这种情况?谢谢。

编辑:每秒调用 processMessages,但我没有从事件中获得任何输出

最佳答案

timer 在哪里声明和定义?

如果它在 Foo::connect() 本地,它将在它有机会触发之前被销毁。大概它只需要是 Foo 类的成员对象即可。

另外请记住,QObject 为计时器提供了它自己的简单接口(interface) - 只需覆盖 protected 虚拟 timerEvent() 函数并调用 QObject 的 startTimer() 开始获取那些计时器事件。在这种情况下,它们不会有一个插槽来接收计时器事件,它们只会在重写的 timerEvent() 函数处结束:

protected:
void timerEvent(QTimerEvent *event) {
processMessages();
}

public:
void connect( /* ... */ ) {

// ...

startTimer(1000);
}

关于c++ - QTimer每秒执行一次方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10667689/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com