2012-07-10 2 views
0

정보를 표시하는 응용 프로그램의 클래스가 있습니다.
SOAP을 통해 서버에서 정보를 얻어야합니다. 내가 RequestInfo() 방법은 주기적으로 한 bWorking이 참으로 호출 할 수 싶습니다C++, ROOT 프레임 워크 : 주기적으로 호출되는 멤버 메서드

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 
}; 

:
여기 내 수업입니다. 나는 pthread 솔루션에 대해 빨간색이지만이를 구현하는 방법을 모르겠습니다. 그리고 아마도 좀 더 사소한 것이 가능할까요?

미리 도움을 청하십시오.
eo.

답변

0

좋아, 알아 냈어. 다른 사용자가 동일한 문제를 겪고있는 경우 :

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

흠 ...

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

또는 일부 타이머와 비동기 호출을 원하는 메가

?

+0

내 프로그램에서 다른 작업을 수행해야합니다 ... 모든 시간을 반복 할 수는 없습니다. – eouti

+0

두 가지 변종이 있습니다, 제 생각에는, 먼저 주기적으로 이것을 수행하는 스레드 또는 std :: async를 사용하는 스레드입니다. 예를 들어 boost :: asio와 같이 비동기 호출을 사용합니다. 그러나 asio는 네트워크 라이브러리입니다. – ForEveR

0

void이기 때문에 어떤 효과가 외부에 있어야하는지 조금 불분명하지만 외부와 대화하고 독점적으로 내부 작업을 수행하지 않으면 (외부 스레드에서 실행하는 경우) 괜찮을 것입니다) 아마도 당신의 디자인을 다시 생각해야합니다.

bWorking은 이미 비공개이므로 InfoControl은 변경시기를 알고 있습니다. 그런 다음 bWorking이 변경 될 때만 (예 : SetWorking()에 연결) ROOT의 Qt 슬롯 구현 (예 : TQObject)과 같은 것을 사용하여 필요한 작업을 트리거 할 수 있습니다.