2016-08-02 12 views
2

私は、プログラムがクラウド内のサービスと通信できるようにするために、C++ライブラリを作成しています。私はバックグラウンドスレッドを実行して、定期的にサーバーをチェックし、失敗した場合に再起動したい。しかし、ライブラリ外のメインプログラムがスレッドの開始を心配する必要がないのはいいでしょう。ライブラリの使用はuseProcess()に制限する必要があります。この時点までに、スレッドは既に実行されているはずです。プログラムの起動時にC++スレッドを開始するにはどうすればよいですか?

メインプログラムが関数を呼び出さずにスレッドを開始するにはどうすればよいですか?私のサービスクラスの静的なコンストラクタでこれを行う方法がありますので、プログラムの開始時にスレッドを開始するようにします(Javaの場合と同じです)。

答えて

10

これは正確に行うことができます。プログラム開始時にコンストラクタがスレッドを開始するグローバルオブジェクトを持つことができます。

個人的には、ライブラリを予期せずに起動するのは良い考えではないと思いますが、ユースケースでは意味をなさない可能性があります。スレッドの正確な要件、シャットダウンの仕方などを文書化してください。プロセス内のすべてのスレッドが協力する必要があります。

例コード:

#include <cstdio> 

//--------- BEGIN LIBRARY 
class MyThread 
{ // The real code goes here 
public: 
    MyThread() 
    { printf("A MyThread has been constructed\n"); } 
    ~MyThread() 
    { printf("A MyThread has been destroyed\n"); } 
    void Start() 
    { printf("A MyThread has been started\n"); } 
    void Stop() 
    { printf("A MyThread has been stopped\n"); } 
}; 

class MyThreadCreator 
{ // Just a helper class to construct/start/stop/destroy the other 
public: 
    MyThread thread; 
    MyThreadCreator() { thread.Start(); } 
    ~MyThreadCreator() { thread.Stop(); } 
}; 
MyThreadCreator p; 
//---------- END LIBRARY 

int main() 
{ 
    printf("Main\n"); 
    return 0; 
} 

A MyThreadはA MyThreadは A MyThreadはA MyThreadは

+1

を破壊された
を停止した
メイン
が開始された
を構築しました代わりに何をお勧めしますか? – Drgabble

+0

でも簡単な例を教えてください。 – Drgabble

+0

@Drgabbleライブラリを使用しているスレッドが呼び出せるスレッドを開始および停止する機能を持つことをお勧めします。 –

関連する問題