デバイスがローカル接続されているデバイス制御装置にネットワークを介して接続される情報処理装置であって、上位層のソフトウェアからの要求により、前記デバイス制御装置とのデータ通信を制御する通信スレッドを生成する通信スレッド制御手段と、前記通信スレッド制御手段によって生成される通信スレッドと、前記通信スレッドにより生成され、前記デバイス制御装置を介して前記デバイスを直接接続したときと同様に制御するためのデバイススタックとを備え、前記通信スレッドは、前記デバイスとの接続を示す接続通知を受信すると、前記デバイススタックから非データ送受信状態であるデバイススタックの検出を行い、当該検出した非データ送受信状態のデバイススタックを介して前記デバイス制御装置と接続しデータ送受信を行うことを特徴とする情報処理装置。前記通信スレッドは、前記非データ送受信状態であるデバイススタックが存在しない場合、当該非データ送受信状態であるデバイススタックが検出されるまで前記デバイス制御装置との接続を待機することを特徴とする請求項1に記載の情報処理装置。前記通信スレッドは、前記デバイススタックが予め規定された個数生成されている場合、新たなデバイススタックの生成を行わないことを特徴とする請求項1に記載の情報処理装置。前記通信スレッドは、前記デバイススタックが予め規定された個数未満である場合、新たなデバイススタックを生成することを特徴とする請求項1に記載の情報処理装置。前記通信スレッドは、前記デバイススタックが予め規定された個数未満である場合、前記非データ送受信状態であるデバイススタックの検出を行い、当該非データ送受信状態であるデバイススタックが検出されない場合のみ、新たなデバイススタックを生成することを特徴とする請求項1に記載の情報処理装置。前記通信スレッド制御手段は、前記通信スレッドを終了させる際、前記通信スレッドの個数と前記デバイススタックの個数とを比較して、前記通信スレッドの個数が前記デバイススタックの個数以下となる場合、当該通信スレッドとの接続に用いたデバイススタックを終了させることを特徴とする請求項1に記載の情報処理装置。前記通信スレッド制御手段は、前記通信スレッドを終了させる際、前記通信スレッドの個数と前記デバイススタックの個数とを比較して、前記通信スレッドの個数が前記デバイススタックの個数以下となる場合、当該通信スレッドとの接続に用いたデバイススタックを終了させないことを特徴とする請求項1に記載の情報処理装置。前記通信スレッド制御手段は、前記通信スレッドを終了させる際、前記通信スレッドの個数と前記デバイススタックの個数とを比較して、前記通信スレッドの個数が前記デバイススタックの個数を超える場合、当該通信スレッドとの接続に用いたデバイススタックを終了させないことを特徴とする請求項1に記載の情報処理装置。請求項1~8のいずれか1項に記載の情報処理装置と、前記情報処理装置にネットワークを介して接続されたデバイス制御装置と、前記デバイス制御装置にローカル接続されたデバイスとを有し、前記情報処理装置が前記デバイス制御装置を介して前記デバイスを制御してデータ通信を行うことを特徴とするデバイス制御システム。デバイスがローカル接続されているデバイスサーバにネットワークを介して接続される情報処理装置の制御方法であって、上位層のソフトウェアからの要求により、通信スレッド制御手段が前記デバイス制御装置とのデータ通信を制御する通信スレッドを生成する通信スレッド生成ステップを実行し、前記通信スレッド生成ステップで生成された通信スレッドは、前記デバイス制御装置を介して前記デバイスを直接接続したときと同様に制御するためのデバイススタックを生成するデバイススタック生成ステップと、前記デバイスとの接続を示す接続通知を受信すると、前記デバイススタックから非データ送受信状態であるデバイススタックの検出を行う検出ステップと、前記検出ステップで検出した非データ送受信状態のデバイススタックを介して前記デバイス制御装置と接続しデータ送受信を行う接続ステップとを実行することを特徴とする制御方法。前記通信スレッドは、前記非データ送受信状態であるデバイススタックが存在しない場合、当該非データ送受信状態であるデバイススタックが検出されるまで前記デバイス制御装置との接続を待機する待機ステップを実行することを特徴とする請求項10に記載の制御方法。前記通信スレッドは、前記デバイススタックが予め規定された個数生成されている場合、前記デバイススタック生成ステップにおいて新たなデバイススタックの生成を行わないことを特徴とする請求項10に記載の制御方法。前記通信スレッドは、前記デバイススタックが予め規定された個数未満である場合、前記デバイススタック生成ステップにおいて新たなデバイススタックを生成することを特徴とする請求項10に記載の制御方法。前記通信スレッドは、前記デバイススタックが予め規定された個数未満である場合、前記検出ステップにおいて前記非データ送受信状態であるデバイススタックの検出を行い、当該非データ送受信状態であるデバイススタックが検出されない場合のみ、新たなデバイススタックを生成することを特徴とする請求項10に記載の制御方法。前記通信スレッドを終了させる際、前記通信スレッド制御手段が、前記通信スレッドの個数と前記デバイススタックの個数とを比較して、前記通信スレッドの個数が前記デバイススタックの個数以下となる場合、当該通信スレッドとの接続に用いたデバイススタックを終了させる終了処理ステップを実行することを特徴とする請求項10に記載の制御方法。前記通信スレッドを終了させる際、通信スレッド制御手段が、前記通信スレッドの個数と前記デバイススタックの個数とを比較して、前記通信スレッドの個数が前記デバイススタックの個数以下となる場合、当該通信スレッドとの接続に用いたデバイススタックを終了させない第2の終了処理ステップを実行することを特徴とする請求項10に記載の制御方法。前記通信スレッドを終了させる際、前記通信スレッド制御手段が、前記通信スレッドの個数と前記デバイススタックの個数とを比較して、前記通信スレッドの個数が前記デバイススタックの個数を超える場合、当該通信スレッドとの接続に用いたデバイススタックを終了させない第3の終了処理ステップを実行することを特徴とする請求項10に記載の制御方法。本発明は、出願人自らが先に提案した特許文献1のクライアント装置及びデバイス制御システムをさらに拡張発展させ、デバイスのインターフェース規格やSDKで規定される最大接続台数を超えてデバイスを接続制御できる情報処理装置、その制御方法、およびデバイス制御システムを提供することを目的とする。上記目的を達成するため、本発明による情報処理装置は、デバイスがローカル接続されているデバイス制御装置にネットワークを介して接続される情報処理装置であって、上位層のソフトウェアからの要求により、前記デバイス制御装置とのデータ通信を制御する通信スレッドを生成する通信スレッド制御手段と、前記通信スレッド制御手段によって生成される通信スレッドと、前記通信スレッドにより生成され、前記デバイス制御装置を介して前記デバイスを直接接続したときと同様に制御するためのデバイススタックとを備え、前記通信スレッドは、前記デバイスとの接続を示す接続通知を受信すると、前記デバイススタックから非データ送受信状態であるデバイススタックの検出を行い、当該検出した非データ送受信状態のデバイススタックを介して前記デバイス制御装置と接続しデータ送受信を行うことを特徴とする。本発明によるデバイス制御システムは、上記の情報処理装置と、前記情報処理装置にネットワークを介して接続されたデバイス制御装置と、前記デバイス制御装置にローカル接続されたデバイスとを有し、前記情報処理装置が前記デバイス制御装置を介して前記デバイスを制御してデータ通信を行うことを特徴とする。本発明による制御方法は、デバイスがローカル接続されているデバイスサーバにネットワークを介して接続される情報処理装置の制御方法であって、上位層のソフトウェアからの要求により、通信スレッド制御手段が前記デバイス制御装置とのデータ通信を制御する通信スレッドを生成する通信スレッド生成ステップを実行し、前記通信スレッド生成ステップで生成された通信スレッドは、前記デバイス制御装置を介して前記デバイスを直接接続したときと同様に制御するためのデバイススタックを生成するデバイススタック生成ステップと、前記デバイスとの接続を示す接続通知を受信すると、前記デバイススタックから非データ送受信状態であるデバイススタックの検出を行う検出ステップと、前記検出ステップで検出した非データ送受信状態のデバイススタックを介して前記デバイス制御装置と接続しデータ送受信を行う接続ステップとを実行することを特徴とする。本発明によれば、情報処理装置がデバイス制御装置を介してデバイスとデータ通信を行う際、デバイスのインターフェース規格やSDKで規定される最大接続台数に制限されることなく、情報処理装置の性能を効果的に発揮して、デバイスを接続制御できるようになる。以下、本発明の実施の形態による情報処理装置について図面を参照して説明する。なお、以下の説明では、情報処理装置としてパーソナルコンピュータPCを一例に挙げて説明する。[第1の実施形態]図1は、本発明の第1の実施形態による情報処理装置の一例が用いられたデバイス制御システムを示すブロック図である。情報処理装置11は、LANローカルエリアネットワークなどのネットワーク10を介してデバイスサーバ12-1~12-n図示の例では、n=4と接続可能に構成されている。なお、上記のネットワーク10は、有線又は無線のいずれの方式を用いてもよい。また、デバイスサーバ12-1~12-4夫々は、汎用的なインターフェースを備える入出力機器であるデバイス13-1~13-2が接続ケーブル10a~10dでローカル接続されている。ここでは、USBUniversalSerialBusインターフェースで接続されている例について説明するが、これに限定されるものではなく、例えば、HDMIやThunderboltなどの他のインターフェースに準拠するインターフェースを用いるようにしてもよい。デバイス13-1~13-4は、汎用的なインターフェースここでは、USBインターフェースを備えた入出力機器である。例えば、キーボード、マウス、又はカードリーダのような入力機器、ディスプレイなどの表示出力機器、そして、プリンタなどの単機能周辺機器、又は、プリント機能の他にスキャン機能、コピー機能、およびストレージ機能などを備える多機能周辺機器であってもよく、これら以外の入出力機器であってもよい。なお、デバイスサーバ12-1~12-4は、それぞれが接続しているデバイス13-1~13-4と一体化した構造とするようにしてもよい。図1に示す例では、情報処理装置が1台であるが、複数の情報処理装置がネットワーク10に接続されている構成であってよい。また、デバイスサーバには、夫々デバイスが1台ずつ接続されているが、複数のデバイスが接続されている構成であってもよい。<情報処理装置の構成>図1に示す情報処理装置11は、本発明の情報処理装置の一例であり、例えば、PCパーソナルコンピュータなどの装置であって、内部バスで互いに接続されたCPU、入力部、表示部、メモリ、通信部、外部記憶部何れも不図示で構成され、ネットワーク10を介してデバイスサーバ12-1~12-4と通信することができる。外部記憶部は、不図示のオペレーティングシステム以下、OS、外部アプリケーション11a、常駐モジュール11b、デバイスサーバ通信モジュール11c、デバイス制御モジュール11d-1~11d-3、デバイススタック11f~1~11f-3、および通信制御部11e等のソフトウェア部品に加えて、各種データが記憶される。これらソフトウェア部品及び各種データは、CPU及びOSの制御に従い、メモリ上に読み出されて各種制御が実行される。<情報処理装置のソフトウェア構成>外部アプリケーション11aは、デバイス13に対する要求起動、接続、又は終了などやユーザ操作に応じた要求を、常駐モジュール11bを介して指示し、当該要求に対する結果を得るためのソフトウェアである。常駐モジュール11bは、OSが起動している際、常に待機および動作しているソフトウェアであり、デバイスサーバ通信モジュール11cおよび通信制御部11eを起動して、ネットワーク上に存在するデバイスサーバ12-1~12-4とデータ送受信を行う。また、常駐モジュール11bは、デバイスサーバ12及び夫々のデバイスサーバ12にローカル接続されたデバイス13-1~13-4を検知して、デバイスサーバ12に関するデバイスサーバ情報及びデバイス13に関するデバイス情報を取得する。デバイスサーバ通信モジュール11cは、常駐モジュール11bによって起動されるソフトウェア部品であって、メインスレッド120及び通信スレッド121~124によってデバイスサーバ12-1~12-4夫々との通信を独立して制御するとともに、通信スレッドの個数、デバイススタック後述の個数及びその通信状態に関する情報データ送受信中か否かなどの管理を行う。メインスレッド120は、上位層のソフトウェアである外部アプリケーション11a、OS、常駐モジュール11bの制御に従い、通信スレッド121~124を生成、起動し、デバイスサーバ12との間の通信を制御するソフトウェアである通信スレッド制御手段。通信スレッド121~124各々は、デバイス1313-1~4が接続されたデバイスサーバ12-1~12-4との間の通信制御を独立して実行するためのプログラムであり、外部アプリケーション11aからの起動要求が契機となり、制御対象とするデバイス1313-1~4ごとに生成される。図1では、4個の通信スレッドが生成されているが、生成される個数はこれに限定されるものではなく、これ以上の個数であってもよい。当該生成された通信スレッドは、常駐モジュール11bが取得したデバイス情報に基づいてデバイス1313-1~13-4との間のデータ送受信に必要なドライバソフトウェアであるデバイスドライバ110、クラスドライバ111、および仮想バスドライバ112を一意に特定し、順次動的に生成する。これらドライバソフトウェアデバイスドライバ110、クラスドライバ111、および仮想バスドライバ112を総称してデバイススタックという。図1では、3つのデバイススタック11f-1~11f-3が生成される。なお、デバイススタックは、生成できる個数が決まっており、デバイスのインターフェース規格やSDKなどによって規定された接続可能なデバイスの台数の上限以後、最大接続数と同数まで生成できる。例えば、USBインターフェースの規格では、最大接続数は127台であり、規格によるとデバイススタックは127個まで生成できる。本実施例では、便宜上、最大接続数を3台、即ち、デバイススタックを3個まで生成できるものとして説明する。また、デバイスの機種が異なる場合は、それぞれの機種に応じたデバイススタックが生成、起動される。この場合も同様に、生成可能なデバイススタックの総個数は、上述した最大接続数まで生成される。更に、通信スレッド121~124の各々は、外部アプリケーション11a若しくは、デバイスサーバ12を介してデバイス13の動作状態ステータスの変化を示す接続通知を受けると、何れのデバイスサーバ12ともデータ送受信を実行していない状態以下、非データ送受信状態のデバイススタック11fの検出を行う。具体的には、デバイスサーバ通信モジュール11c内で管理してデバイスサーバとの通信状態に関する情報に基づいて非データ送受信状態を判断する。そして、該当する非データ送受信状態のデバイススタック11fが検出されると、該当するデバイススタック11fの仮想バスドライバ112に切替通知することで、データ通信経路の切り替えが行われ、デバイススタック11fとの接続が行われる。そして、当該デバイススタック11fを介して接続されるデバイスサーバ12に対して、独立したセッションを開始し、データ送受信が完了すると当該セッションの終了を指示する。通信スレッドの個数とデバイススタックの個数は必ずしも一致せず、デバイススタックの個数が最大接続数である場合、通信スレッド121~124は、デバイススタックの生成を行わない。デバイス制御モジュール11d-1~11d-3の各々は、デバイスサーバ通信モジュール11cによって、夫々のデバイススタック11fに対応して起動されるソフトウェアである。例えば、デバイス制御モジュール11d-1は、デバイススタック11f-1、デバイス制御モジュール11d-2は、デバイススタック11f-2、デバイス制御モジュール11d-3は、デバイススタック11f-3、というように夫々のデバイススタック11fと対応づけて起動される。そして、不図示のSDKを介しデバイススタック11f-1~11f-3夫々と対となって動作し、デバイス13-1~13-4を各々に独立して制御する。通信スレッド121~124によってデバイスサーバ12とのセッションが開始されると、該当の通信スレッドに対してデータ送受信開始通知を送って、接続したデバイススタック11f11f-1~3を介してデバイスサーバ1212-1~4とのデータ送受信の制御を開始し、データ送受信が終了すると、データ送受信完了通知を該当の通信スレッドに送信する。<デバイススタックの構成>次に、デバイススタック11f11f-1~3を構成する各ソフトウェア部品について説明する。デバイスドライバ110は、OSや外部アプリケーション11a又はデバイス制御モジュール11d-1~11d-3の指示によって、デバイス1313-1~4に対する制御コマンドを生成してデータ送受信を実行する。そして、デバイスドライバ110は当該制御コマンドに対するデバイス1313-1~4からの応答つまり、データ送受信の結果を待って、当該応答をデバイス制御モジュール11d11d-1~3に通知するソフトウェアである。クラスドライバ111ここでは、USBクラスドライバは、制御コマンドを送受信するためのUSBポートを有しており、デバイス制御モジュール11d11d-1~3又はデバイスドライバ110で生成された制御コマンドをUSBパケットに変換して仮想バスドライバ112へ送り、さらに当該USBパケットを制御コマンドに変換してデバイス制御モジュール11d11d-1~3又はデバイスドライバ110に渡す。仮想バスドライバ112ここでは、USB仮想バスドライバは、通信制御部11eを介して夫々のデバイスサーバ12に接続されたデバイス13を、ローカル接続によって直接接続したときと同様に制御するためのソフトウェアである。通信制御部11eは、ネットワーク10と接続してデバイスサーバ12との間の通信を制御する。<デバイスサーバ12の構成>デバイス制御装置の一例であるデバイスサーバ1212-1~4の各々は、内部バスで互いに接続されたCPU、メモリ、通信部、ローカルインタフェースここでは、USBインターフェース、及び外部記憶部何れも不図示で構成されており、ネットワーク10を介して情報処理装置11と通信すると共に、ローカル接続しているデバイス13-1~13-4夫々と接続ケーブルを介してデータ送受信することができる。外部記憶部には、OS不図示、通信制御部12a、仮想化制御部12b、およびデバイス制御部12cなどのソフトウェアに加え各種データが記憶される。これらソフトウェア、及び記憶されたデータは、CPUの制御に従い、メモリ上に読み出されて各種制御が実行される。通信制御部12aは、ネットワーク10と接続して情報処理装置11との間の通信を制御する。仮想化制御部12bは、通信制御部12aを介して情報処理装置11の仮想バスドライバ112と通信し、デバイス制御部12cを制御する。デバイス制御部12cは、USBインターフェースを介して接続されているデバイス1313-1~4を制御する。このような構成のデバイス制御システムにおいて、情報処理装置11は、仮想バスドライバ112によって、デバイスサーバ12の仮想化制御部12bを介しデバイス制御部12cを遠隔で制御することで、情報処理装置11にデバイス1313-1~4があたかもローカル接続されたときと同様に制御することができる仮想化制御。また、デバイスサーバ1212-1~4は、ローカル接続しているデバイス1313-1~4からデバイス情報デバイス識別情報、デバイス構成、種別などをデバイス制御部12cによって取得し、当該デバイス情報及び自装置の情報であるデバイスサーバ情報サーバ識別情報、サーバ設定情報などを情報処理装置11に送信する。デバイス情報やデバイスサーバ情報は、情報処理装置11からの要求でデバイスサーバ12を介して取得するようにしてもよいし、デバイスサーバ12で電源がオンされた場合又はデバイスサーバ12の設定が変更された場合に、デバイスサーバ12から情報処理装置11に送信することで、情報処理装置11に通知されるようにしてもよい。<第1の実施形態のデバイス制御システムの制御シーケンス及びフロー>図2は、図1に示すデバイス制御システムにおけるデータ送受信を説明するためのシーケンス図である。なお、情報処理装置11は、デバイスサーバ情報やデバイス情報を取得しているものとして説明する。<デバイスサーバ通信モジュール11の動作フロー>図3は、図1に示す情報処理装置11においてデバイスサーバ通信モジュール11cのメインスレッド120の動作の一例を説明するためのフローチャートであり、図2のシーケンス図を参照しながら説明する。常駐モジュール11bは、プロセス起動通知によってデバイスサーバ通信モジュール11cを起動する。デバイスサーバ通信モジュール11cが起動するとメインスレッド120が開始され、メインスレッド120は、常駐モジュール11bからの要求起動、接続、又は終了などを待ち受ける待機状態となるステップS301。そして、この待機状態において、常駐モジュール11bからの要求を受けると常駐モジュール11bからのプロセス終了通知であるか否かを判定するステップS302。プロセス終了通知であると判定した場合ステップS302において、YES、デバイスサーバ通信モジュール11cによる処理を終了する。一方、プロセス終了通知でない場合ステップS302において、NO、外部アプリケーション11aから通知されるデバイス13に対する要求起動、接続、又は終了などの通知以下、要求通知であると判断するステップS303。続いて、受信した要求通知の判定処理を行う。まず、デバイスサーバ通信モジュール11cは当該要求通知が起動通知であるか否かを判定するステップS304。<通信スレッドの生成開始>メインスレッド120は、要求通知が起動通知であると判定するとステップS304において、YES、デバイスサーバ1212-1~4毎に独立したデータ通信制御を行う通信スレッド121~124を生成して、当該通信スレッドを開始させステップS305。そして、ステップS301の処理に戻る。図4は、図3のステップS305に示す通信スレッド生成開始処理を説明するためのフローチャートである。メインスレッド120は、外部アプリケーション11aからの起動要求に応じて、常駐モジュール11bから送られてくる起動通知を受けると、通信スレッドを生成し、当該通信スレッドは、デバイスサーバ12との通信プロトコルの決定を行う。例えば、LANLocalAreaNetworkで通信するか、HTTPHyperTextTransferProtocolなどを使ってインターネットなど外部のネットワークを介して接続して通信するかを決定するステップS401。なお、ここでは、LANで通信するためのプロトコルで通信するものとし、以降、LANで接続するものとして説明する。次に、通信スレッドでは、デバイススタック11fの個数が規定された最大接続数ここでは、3個か否かを判定するステップS402。そして、デバイススタックの個数が最大接続数3個未満の場合ステップS402において、NO、常駐モジュール11bが取得したデバイス情報に基づいてデバイススタック11fを生成し、前述の仮想化制御を開始するステップS403。なお、デバイススタックを生成するときに、後述する非データ送受信状態のデバイススタックの検出を行い、当該非データ送受信状態のデバイススタックが検出されない存在しない場合のみ、新たにデバイススタックを生成するようにしてもよい。続いて、通信スレッド121~124は、ステップS403の処理で生成したデバイススタック11fに応じたデバイス制御モジュール11dを起動しステップS404、当該デバイス制御モジュール11dからの起動完了イベントの通知を受けると、該当するデバイスサーバ12へセッションの接続を通信制御部11eに対して指示するステップS405。そして、当該セッションが接続されると、通信スレッド121~124に対してデバイス監視情報後述をデバイスサーバ12に対して送信するように指示するステップS406。そして、デバイスサーバ12への送信が完了すると、通信制御部11eに対してセッションの終了を指示しステップS407、デバイスサーバ12とのセッションが終了するとデバイスとの通信が切断され、常駐モジュール11bやメインスレッド120からの指示を待機する。なお、ステップS402において、デバイススタック11fの個数が最大接続数3個である場合ステップS402において、YES、ステップS405の処理に移行する。一方、ステップS406において、情報処理装置11からのデバイス監視情報を受信したデバイスサーバ12は、当該デバイス監視情報に基づいて、自装置にローカル接続されているデバイス13の動作状態を監視する。そして、当該デバイス13の状態変化を検知すると、当該検知を情報処理装置11へ通知接続通知する。ここで、状態変化とは、例えば、カードリーダデバイスに対してカードの読み取り操作ユーザIDの取得が行われたことや、デバイスの操作ボタンが押下されたことなどによって生じるものであるが、これらに限定されるものではない。なお、デバイス監視情報とは、デバイス13の監視を行なうための1組の監視プログラム監視情報であり、デバイスの機種ごとに異なるっており、あらかじめデバイスサーバ12に導入しておいてもよいし、必要なデータだけを情報処理装置11などから取得するようにしてもよい。<通信スレッドによる接続処理>再び、図3を参照し、メインスレッド120は、ステップS304において、要求通知が起動通知でない場合ステップS304において、NO、接続通知であるか否かを判定するステップS306。要求通知が接続通知である場合ステップS306において、YES、通信スレッド121~124に接続処理を開始させステップS307、ステップS301の処理に戻る。図5は、図3のステップS307に示す接続処理を説明するためのフローチャートである。通信スレッド121~124は、メインスレッド120で生成開始された後、常駐モジュール11bやメインスレッド120からの指示、若しくは、デバイスサーバ12-1~12-4のいずれかからの接続通知を待つ待機状態となるステップS501。そして、常駐モジュール11bを介して外部アプリケーション11aからの接続通知を受けた場合、若しくは、デバイスサーバ1212-1~4のいずれかから接続通知を受けると、通信スレッド121~124は、デバイススタック11fのうち非データ送受信状態のデバイススタックの検出を行うステップS502。ここで、デバイススタック11f11f-1~3の全てがデータ送受信状態である場合ステップS502において、NO、通信スレッド121~124は非データ送受信状態のデバイススタックが検出されるまで待機状態としステップS503、ステップS502の処理へ戻る。一方、非データ送信状態のデバイススタックが検出されるとステップS502において、YES、通信スレッド121~124は、当該非データ送受信状態のデバイススタック例えば、デバイススタック11f-2と接続するためにデータ通信経路を切り替えるステップS504。次に、通信スレッド121~124は、非データ送受信状態であるデバイススタック11f-2を介して接続されるデバイスサーバ12-2に対して独立したセッションを開始させステップS505、セッションが開始されると、デバイス制御モジュール11d-2は、通信スレッド121~124にデータ送受信開始通知を送るステップS506。デバイス制御モジュール11d-2は、データ送受信開始通知を受信すると、デバイススタック11f-2を経由し、通信スレッドここでは、通信スレッド124にデバイスサーバ12-4を介してデバイス13-4との間でデータ送受信の制御を行う。通信スレッド124は、デバイススタック11f-2の制御によるデータ送受信が完了するまで待機しステップS507、デバイス制御モジュール11d-2からデータ送受信終了通知を受信すると、デバイススタック11f-2を介して通信制御部11eにデバイスサーバ12-4との間のセッションを終了させるステップS508。<デバイス制御モジュールによるデータ送受信制御フロー>図6は、図5のステップS506~S507の処理で実行されるデバイス制御モジュール11dによるデータ送受信制御の一例を説明するためのフローチャートである。デバイス制御モジュール11dここでは、11d-2とするは、デバイススタック11fここでは、11f-2とするに対応して起動されており、例えば、通信スレッド124からの指示によりデータ送受信するための通信ポートをオープンしステップS601、通信スレッド124からのデータ送受信開始通知を受けるまで待機しステップS602、通信スレッド124から送られてくる通知の判定を行うステップS603。デバイス制御モジュール11d-2は、通信スレッド124からデータ送受信開始通知を受けるとステップS603において、NO、デバイススタック11f-2を制御して、デバイスサーバ12-4を介してデバイス13-4とのデータ送受信を開始しステップS604、データ送受信が完了するまでの間ステップS605において、NOは、ステップS604に戻り、データ送受信を制御する。そして、データ送受信が完了するとステップS605において、YES、通信スレッド124にデータ送受信完了通知を送信するステップS606。そして、ステップS602の処理に戻る。一方、通信スレッド124からデータ送受信の待機状態終了の指示によりステップS603において、YES、オープンしていた通信ポートをクローズしてステップS607、デバイススタック11f-2を非データ送信状態とする。ここで、デバイススタック11f-2は、非データ送受信状態に遷移するだけであり、外部アプリケーション11aの指示などにより切断要求後述がなされるまで終了消滅させず、別の通信スレッドがすぐに利用可能な状態としておく。<終了処理について>再び図3を参照し、ステップS306において、要求通知が接続通知でないとステップS306において、NO、デバイスサーバ通信モジュール11cのメインスレッド120は要求通知が終了通知であるか否かを判定するステップS308。要求通知が終了通知であるとステップS308において、YES、デバイスサーバ通信モジュール11cは後述する終了処理を行ってステップS309、ステップS301の処理に戻る。<通信スレッドの終了及びデバイススタックの終了消滅>図7は、図3のステップS309に示す終了処理を説明するためのフローチャートである。終了処理は、外部アプリケーション11aからの切断要求応じて実行される。常駐モジュール11bは当該切断要求に応じてメインスレッド120に通信スレッド終了通知を送り、メインスレッド120は通信スレッド121~124に終了を指示する。通信スレッド121~124は、スレッド終了の指示を受けると、デバイスサーバ通信モジュール11c内で管理している通信スレッドの個数とデバイススタックの個数とを比較して、通信スレッドの個数がデバイススタックの個数以下であるか否かを判定するステップS701。なお、このときの通信スレッドの個数は、終了させる通信スレッドを除いた個数である。通信スレッドの個数がデバイススタックの個数以下であるとステップS701において、YES、通信スレッド121~124は、該当するデバイス制御モジュール11dここでは、11d-2に終了通知を送って、デバイス制御モジュール11d-2は、デバイススタック11fここでは、11f-2の終了処理を実行し、通信スレッド121~124に終了処理完了イベントを通知するステップS702。通信スレッド121~124は、終了処理完了イベントの通知を受けると、デバイススタック11f-2による仮想制御を終了させてデバイス13との接続を切断し、デバイススタック11f-2を終了消滅させるステップS703。常駐モジュール11bは、終了通知を送った後、メインスレッド120にプロセス終了通知を指示し、メインスレッド120はプロセス終了通知を受信すると当該通信スレッド121~124を終了させる。一方、ステップS701において、通信スレッドの個数がデバイススタックの個数を超えている場合ステップS701において、NO、デバイススタック11f-2は、消滅させず、デバイススタック11f-2と接続していた通信スレッドのみを終了させる。上述のように、本発明の第1の実施形態では、情報処理装置において、接続通知に応じて非データ送受信状態であるデバイススタックの検出を行い、検出された非データ送受信状態のデバイススタックを介してデバイスサーバと通信を行うようにしたので、インターフェース規格やSDKなどの規定に制限されることなく、性能を効果的に発揮して、最大接続台数を超えたデバイスを制御することができる。そして、第1の実施形態では、デバイスとの間でデータ送受信が終了した際、通信スレッドの個数がデバイススタックの個数より少ない場合には、当該デバイススタックを消滅させるので、非データ送受信状態のデバイススタックによって情報処理装置のリソースが消費されることを低減させることができる。このように、最大接続台数を超えたデバイスを制御する場合も、1台の情報処理装置で制御、管理することが可能であり、新たに別の情報処理装置を用意しなくてもよいので、管理も容易となってコストを低減することができる。[第2の実施形態]続いて、本発明の第2の実施形態による情報処理装置が用いられたデバイス制御システムの一例について説明する。第2の実施形態は、通信スレッドの終了時の処理が第1の実施例と異なっており、通信スレッド終了時にデバイススタックを終了消滅させない点が特徴である。なお、第2の実施形態によるデバイス制御システムの構成は図1に示すデバイス制御システムの構成と同様であり、図8に示すシーケンス図において、符号801で示す太線枠で囲った部分のみの制御が異なるだけであるため、システム構成や各装置の機能などの詳細な説明を省略する。<第2の実施形態のデバイス制御システムの制御シーケンス及びフロー>図8は、本発明の第2の実施形態によるデバイス制御システムにおけるデータ送受信を説明するためのシーケンス図である。また、図9は、本発明の第2の実施形態による情報処理装置においてデバイスサーバ通信モジュールの動作の一例を説明するためのフローチャートである。図9は、図1に示す情報処理装置11においてデバイスサーバ通信モジュール11cのメインスレッド120の動作の一例を説明するためのフローチャートであり、図8を参照しながら説明する。<メインスレッドの動作フロー>常駐モジュール11bは、プロセス起動通知によってデバイスサーバ通信モジュール11cを起動し、デバイスサーバ通信モジュール11cが起動するとメインスレッド120が開始され、メインスレッド120は、常駐モジュール11bからの要求起動、接続、又は終了などを待ち受ける待機状態となるステップS901。そして、この待機状態において、常駐モジュール11bからの要求を受けると常駐モジュール11bからのプロセス終了通知であるか否かを判定するステップS902。プロセス終了通知である場合は、後述するステップS910へ移行する。一方、プロセス終了通知のプロセス終了通知でない場合ステップS902において、NO、外部アプリケーション11aから通知されるデバイス13に対する要求起動、接続、又は終了などの通知以下、要求通知であると判断するステップS903。<通信スレッドの生成開始>続いて、受信した要求通知の判定処理を行う。まず、デバイスサーバ通信モジュール11cは当該要求通知が起動通知であるか否かを判定するステップS904。メインスレッド120は、要求通知が起動通知であると判定するとステップS304において、YES、図4で説明したと同様のフローを実行し、デバイスサーバ1212-1~4毎に独立した通信制御を行う通信スレッド121~124を生成して、当該通信スレッドを開始させるステップS905。そして、ステップS901の処理に戻る。<通信スレッドによる接続処理>要求通知が起動通知でない場合ステップS904において、NO、接続通知であるか否かを判定するステップS906。要求通知が接続通知である場合ステップS906において、YES、図5および図6の説明と同様のフローを実行し、通信スレッドに接続処理を開始させステップS907、ステップS301の処理に戻る。<通信スレッドの終了処理>要求通知が接続通知でないとステップS906において、NO、デバイスサーバ通信モジュール11cのメインスレッド120は要求通知が終了通知であるか否かを判定するステップS908。要求通知が終了通知である場合ステップS908において、YES、メインスレッド120は該当する通信スレッドを終了させるステップS909。この際、デバイススタック11fを終了消滅させず、ステップS901の処理に戻る。即ち、デバイススタック11fは終了させず、該当する通信スレッドのみを終了させる。<デバイススタックの終了消滅>デバイススタック11fを終了消滅させる場合は、常駐モジュール11bからデバイスサーバ通信モジュール11cのメインスレッド120に対してプロセス終了通知を送ることによって実行されるステップS902において、YES。常駐モジュール11bからプロセス終了通知が送られると、デバイスサーバ通信モジュール11cのメインスレッド120は該当するデバイス制御モジュール11dに終了通知を送って、デバイス制御モジュール11d-2は、デバイススタック11fここでは、11f-2の終了処理を実行し、通信スレッドに終了処理完了イベントを通知するステップS910。通信スレッド121~124は、終了処理完了イベントの通知を受けると、デバイススタック11f-2による仮想制御を終了させてデバイス13との接続を切断し、デバイススタック11f-2を終了消滅させるステップS911。このように、第2の実施形態においても、情報処理装置において、接続通知に応じて非データ送受信状態であるデバイススタックの検出を行い、検出された非データ送受信状態のデバイススタックを介してデバイスサーバと通信を行うようにしたので、インターフェース規格やSDKなどの規定に制限されることなく、性能を効果的に発揮して、最大接続台数を超えたデバイスを制御することができる。そして、第2の実施形態では、デバイスとの間でデータ送受信が終了した際、当該データ送受信に係るデバイススタックを終了消滅させない、即ち、非データ送受信状態のデバイススタックとして終了消滅させないようにしたので、例えば、接続待ちの通信スレッドがある場合には、新たなデバイススタックの生成を待つことなく、当該非データ送受信状態のデバイススタックを利用してデータ送受信を実行することができる。なお、デバイススタックを生成した後、所定の時間が経過すると、当該デバイススタックを消滅させるようにして非データ送受信状態のデバイススタックの個数を制限し、情報処理装置のリソースが消費されることを低減するようにしてもよい。[第3の実施形態]次に、本発明の第3の実施形態による情報処理装置が用いられたデバイス制御システムの一例について説明する。図10は、本発明の第3の実施形態によるデバイス制御システムの一例を示すブロック図であり、図1に示すネットワーク10がインターネットなど外部のネットワークを介して接続する場合のデバイス制御システムの一例を示す図である。なお、第3の実施形態に示すデバイス制御システムにおいて、情報処理装置11の構成は図1に示す情報処理装置と同様である。また、第3の実施形態に示すデバイス制御システムにおいて、図1に示すデバイス制御システムと同一の構成要素については同一の参照番号を付す。図10において、情報処理装置11はLANなどのネットワーク1000を介してプロキシサーバ1001に接続される。そして、プロキシサーバ1001はインターネットInternetなど外部のネットワーク以下、インターネット1002と接続されている。さらに、図示の例では、インターネット1002にはプロキシサーバ1003および1004が接続され、プロキシサーバ1003にはLANなどのネットワーク1005を介してデバイスサーバ12-1および12-2が接続される。また、プロキシサーバ1004にはLANなどのネットワーク1006を介してデバイスサーバ12-3および12-4が接続される。ここでは、情報処理装置11に備えられたデバイスサーバ通信モジュール11cはインターネット接続による通信制御を行う。デバイスサーバ通信モジュール11cは、デバイススタックで生成されたUSBパケットとデバイスサーバと通信する際のネットワークパケットとを、例えば、HTTPHyperTextTransferProtocolなどのプロトコルで規定されたデータ部に乗せてデバイスサーバと通信を行う。これによって、デバイスサーバ通信モジュール11cはブラウザによってWebサーバと接続する場合と同一の手法でプロキシサーバおよびファイアーウォールFWを越えて外部サーバであるデバイスサーバに接続する。なお、上述のように、インターネットなど外部のネットワークに接続するシステムの場合、例えば、サーバコンピュータをホスティングするサービスのようなクラウドコンピューティング以下クラウドというの技術を利用してシステム構成するようにしてもよい。クラウドを利用することによって、本実施例におけるデバイスサーバおよびデバイスを外部のネットワーク上に任意に配置することが可能となり、ユーザがこれらの所在を意識することなく、インターネットなどのネットワークを通じて利用できる。このように、クラウドを用いればシステムを柔軟に構成変更又は拡張することができる。上述のように、本発明の実施の形態では、インターネットなど外部のネットワークを介して接続されており、デバイス及びデバイスサーバの台数が確認できないような場合であっても、第1及び第2の実施形態と同様、情報処理装置は、インターフェース規格やSDKなどによって規定される最大接続数を超えてデバイスの制御を行うことができるので、外部のネットワーク上に接続されているデバイス及びデバイスサーバの台数を意識することなく制御することが可能である。上述の説明から明らかなように、図1に示す例では、デバイスサーバ通信モジュール11cメインスレッドが通信スレッド制御手段として機能する。以上、本発明について実施の形態に基づいて説明したが、本発明は、これらの実施の形態に限定されるものではなく、この発明の要旨を逸脱しない範囲の様々な形態も本発明に含まれる。例えば、上記の実施の形態の機能を制御方法として、この制御方法を情報処理装置に実行させるようにすればよい。また、上述の実施の形態の機能を有するプログラムを制御プログラムとして、この制御プログラムを情報処理装置が備えるコンピュータに実行させるようにしてもよい。なお、制御プログラムは、例えば、コンピュータに読み取り可能な記録媒体に記録される。また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェアプログラムを、ネットワーク又は各種記録媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータまたはCPUやMPU等がプログラムを読み出して実行する処理である。