プログラムがクラウド内のサービスと通信できるようにするC ++ライブラリを作成しています。サーバーを定期的にチェックし、障害が発生した場合にサーバーを再起動するバックグラウンドスレッドを実行したいと思います。ただし、ライブラリの外部にあるメインプログラムが、スレッドの開始について心配する必要がないのは良いことです。ライブラリの使用はに制限する必要がありますuseProcess()
。この時点で、スレッドはすでに実行されているはずです。
メインプログラムが関数を呼び出さなくてもスレッドを開始するにはどうすればよいですか?サービスクラスの静的コンストラクターでこれを実行して、プログラムの開始時にスレッドを開始する方法はありますか(Javaで行うように)?
そのように正確に行うことができます。コンストラクターがプログラムの開始時にスレッドを開始するグローバルオブジェクトを持つことができます。
個人的には、ライブラリが予期せずスレッドを起動するのは良い考えではないと思いますが、ユースケースではそれが理にかなっている可能性があります。スレッドの正確な要件、スレッドをシャットダウンする方法などを必ず文書化してください。プロセス内のすべてのスレッドが連携する必要があります。
コード例:
#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;
}
MyThreadが構築されまし
たMyThreadが開始されました
メイン
MyThreadが停止されまし
たMyThreadが破棄されました
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加