C++ C++;,根框架:定期调用成员方法
我的应用程序中有一个类显示信息。C++ C++;,根框架:定期调用成员方法,c++,methods,root-framework,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);
我必须通过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
为true。
我了解了pthread
解决方案,但不知道如何实现这一点。也许更琐碎的事情是可能的
提前感谢您的帮助,eo.毫米。。。Mb
while (bWorking)
{
RequestInfo();
/* sleep os sleep function, or boost, or something else.
time - period to sleep.*/
sleep(time);
}
或者您想要异步调用,并使用一些计时器?由于它是一个
无效的函数,所以有点不清楚RequestInfo()
应该对外部产生什么样的影响,但是如果它以某种方式与外部对话,并且不专门执行某些内部作业(那么在额外的线程中运行它就可以了)你也许应该重新考虑你的设计
b工作
已经是私有的,因此InfoControl
知道它何时更改。然后,您可以使用类似于ROOT的Qt-slots实现的东西(例如,使用TQObject
)来触发所需的操作,仅当bWorking
发生更改时(例如,将其挂接到某个SetWorking()
)即可。确定,找到答案。
如果有人有相同的问题:
TTimer *timer = new TTimer();
timer->Connect("Timeout()", "InfoControl", this, "RequestInfo()");
timer->Start(1000, kFALSE);
我需要在我的程序中做其他事情。。。我不能把所有的时间都花在循环上。我认为有两种变体,第一种是周期性地执行循环的线程,或者使用std::async,第二种是使用一些异步调用,例如boost::asio,但是asio是网络库。。。