C ++,ROOT框架:定期调用的成员方法

时间:2012-07-10 12:38:19

标签: c++ methods root-framework

我的应用程序中有一个显示信息的课程 我必须通过SOAP从服务器获取这些信息 这是我的班级:

class InfoControl : public TGCompositeFrame {
private:
    //char*, int....
    bool bWorking;
public:
    InfoControl(const TGWindow *p);
    virtual ~InfoControl();
    void SetEventRate(char* evnum);
    void SetBufferRate(char* rate);
    void SetSuccess(char *s);
    void RequestInfo();
    ClassDef(InfoControl,1)  //useless : ROOT specific stuff
};

只要RequestInfo()为真,我希望定期调用bWorking方法。 我对pthread解决方案感兴趣,但不知道如何实现这一点。也许更微不足道的事情可能吗?

提前感谢您的帮助,
EO。

3 个答案:

答案 0 :(得分:0)

嗯... Mb

while (bWorking)
{
    RequestInfo();
    /* sleep os sleep function, or boost, or something else. 
    time - period to sleep.*/
    sleep(time);
}

或者您想要使用某个计时器进行异步调用?

答案 1 :(得分:0)

有点不清楚RequestInfo()应该对外界产生什么样的影响,因为它是void,但如果它以某种方式与外界交谈并且不完全是某种内部工作(然后在一个额外的线程中运行它会很好)你应该重新考虑你的设计。

bWorking已经是私有的,因此InfoControl知道它何时发生变化。然后,您可以使用ROOT的Qt插槽实现(例如使用TQObject)来触发仅在bWorking更改时触发所需操作(例如将其挂钩到某些SetWorking())。

答案 2 :(得分:0)

好的,发现了。 如果有人有同样的问题:

TTimer *timer = new TTimer();  
timer->Connect("Timeout()", "InfoControl", this, "RequestInfo()");  
timer->Start(1000, kFALSE);