【发布时间】:2012-05-20 15:15:32
【问题描述】:
我正在学习 Qt,我正在从 Qt wiki 阅读有关线程、事件和 QObjects 的信息,并遵循 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
}
}
}
这很简单,但我认为它说明了我的情况。为什么这不起作用以及我必须处理这种情况的其他替代方法?谢谢。s
编辑:processMessages 每秒被调用一次,但我没有从事件中得到任何输出
【问题讨论】:
-
除非您指定,否则我们无法理解“什么不起作用”!
-
我看不到 processMessages() 与事件的关系(FooEvents?)
-
@FrankOsterfeld 。它是我正在使用的 API 的一部分。我必须实现 API 提供的所有事件,当我调用 API 方法时,它会通过 FooWrapper 触发相应的事件。
-
@sectorzz9:所以你已经编辑了问题,说
processMessage()每秒都会被调用。在这种情况下,计时器显然没有问题。你需要问一个关于你没有得到“事件的任何输出”的真正问题的问题。这里没有关于您期望什么输出的信息,并且问题的标题与您的实际问题无关(因为该方法每秒执行一次)。