外部ライセンスシステムと通信するプログラムを作成しようとしています。このプログラムは、ライセンスマネージャーであり、いくつかの製品ライセンスを処理します。スレッドを使用して外部APIにアクセスするオブジェクトを制御する
ライセンスマネージャが検出した各製品について、ライセンスSDKを使用してAPIコールを実行してライセンスシステムを初期化します。
通常のクラスを使用すると簡単です。なぜなら、APIをラップしてメンバー関数を呼び出して初期化して実行できるからです。後で私が必要とするならば、私は、API呼び出しを介してライセンスを既に初期化しているクラスを使用しているので、私は後でそのライセンスに関するより多くの情報を取得することができます。私は私のプログラムを閉じると、私はコールストップライセンスをしてやる。
私がしたいのは、各製品とそのライセンスについて、このラッパーオブジェクトを管理してAPIコールを実行し、ライセンスシステムと通信するためのスレッドを作成することです。
以下は私がやりたいの例です:マルチスレッドの私の限られた知識に基づいて
Class LicenseWraper
{
LicenseWrapper()
{
// this is a C api call from the license SDK
StartLicense();
}
~licenseWrapper
{
// this is a C api call from the license SDK
EndLicense();
}
string GetLicenseInfo()
{
// this is a C api call from the license SDK
return GetLicenseInfoApi();
}
}
void main()
{
LicenseWraper oLicense = new LicenseWrapper();
string sMyInfo = oLicense.GetLicenseInfo();
}
、私はやってスレッドに関数を渡すことができます仕事と終わり。デリゲートまたは専用関数を介してスレッドにlicenseWrapper
オブジェクトを作成すると、オブジェクトを作成してライセンスシステムを正常に初期化できます。
しかし、ライセンスシステムが初期化されたので、oLicense.GetLicenseInfo()
でライセンス情報を取得したいと考えています。私の理解は、私はオブジェクトを作成したスレッドからその呼び出しを行うことができないので、oLicense.GetLicenseInfo()
呼び出しは現在外部スレッドから呼び出されているので機能しません。
私の質問はこれです:スレッドを使ってオブジェクトを管理し、そのスレッドからapi呼び出しを行うことができるようにそのオブジェクトを生かしておくにはどうすればよいですか?これも可能ですか?
洞察や助けをいただければ幸いです。
それをグローバル変数にするだけで、1人のライセンスプロバイダですべての人に十分です。 –
@HansPassantコメントをいただきありがとうございますが、グローバルライセンスを取得したことが何を意味するのかよく分かりませんでした。あなたは例を挙げることができますか? –