C++, 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 решения, но не знаю, как это реализовать. А может быть, что-то более тривиальное возможно?

Заранее спасибо за помощь,
ео.

3 ответа

Решение

Хорошо, узнал. Если у кого-то есть такая же проблема:

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

Немного неясно, что это за эффекты RequestInfo() должен иметь снаружи, так как это void, но если он каким-то образом общается с внешним миром и не выполняет исключительно какую-то внутреннюю работу (тогда запускать его в дополнительном потоке будет хорошо), возможно, вам следует пересмотреть свой дизайн.

bWorking уже является частным, поэтому InfoControl знает, когда это изменится. Затем вы можете использовать что-то вроде реализации слотов Qt ROOT (например, с TQObject) запускать необходимое действие только тогда, когда bWorking изменения (например, зацепить это в некоторые SetWorking()).

Мммм... Мб

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

или вы хотите асинхронный вызов, с некоторым таймером?

Другие вопросы по тегам