次の方法で共有


マルチスレッド サービス

サービス 制御マネージャー (SCM) は、サービス制御イベントをサービスの制御ハンドラー ルーチンに送信することによって、サービスを制御します。 SCM がサービスの状態を追跡できるように、サービスは適切なタイミングで制御イベントに応答する必要があります。 また、サービスの状態は、SCM が受け取る状態の説明と一致する必要があります。

サービスと SCM の間のこの通信メカニズムにより、1 つのサービスで複数のスレッドを使用する場合は注意が必要です。 サービスが SCM によって停止するように指示された場合、サービスが停止したことを SCM に報告する前に、すべてのスレッドが終了するまで待機する必要があります。 そうしないと、SCM がサービスの状態について混乱し、正しくシャットダウンできない可能性があります。

SCM には、サービスが停止制御イベントに応答していること、およびサービスの停止中に進行状況が行われていることを通知する必要があります。 SCM は、SetServiceStatus の前回の呼び出しで指定された時間内 (待機ヒント) 内にサービスが (SetServiceStatus を介して) 応答し、チェック ポイントが SetServiceStatus の前の呼び出しで指定されたチェックポイントより大きくなった場合に、サービスが進行していることを前提としています。

サービスが、すべてのスレッドが終了する前にサービスが停止したことを SCM に報告した場合、SCM はこれを矛盾と解釈する可能性があります。 これにより、サービスを停止または再起動できない状態になる可能性があります。