0

アプリケーションに情報を表示するクラスがあります。
これらの情報は、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。

4

3 に答える 3

0

わかりました。誰かが同じ問題を抱えている場合:

TTimer *timer = new TTimer();  
timer->Connect("Timeout()", "InfoControl", this, "RequestInfo()");  
timer->Start(1000, kFALSE);
于 2012-07-11T09:04:22.200 に答える
0

RequestInfo()であるため、外部にどのような影響を与えるべきかは少し不明ですが、void何らかの形で外部と通信し、内部ジョブのみを実行しない場合 (追加のスレッドで実行しても問題ありません)、次のようにする必要があります。多分あなたのデザインを再考してください。

bWorkingすでに非公開なので、InfoControlいつ変更されるかがわかります。次に、ROOT の Qt スロット実装のようなものを使用して (たとえば a を使用TQObject)、変更された場合にのみ必要なアクションをトリガーできbWorkingます (たとえば、 some にフックしますSetWorking())。

于 2012-07-10T13:07:20.567 に答える
0

うーん...Mb

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

または、タイマーを使用して非同期呼び出しが必要ですか?

于 2012-07-10T12:42:38.697 に答える