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);
}
или вы хотите асинхронный вызов, с некоторым таймером?