2

すべての接続には、それぞれに 1 つのスレッドが必要です。現在のところ、期間ごとに一定数の接続のみを許可しています。そのため、ユーザーが接続するたびに、最後にチェック時間を設定してから一定期間内であれば、カウンターをインクリメントします。

1.get current_time = time(0)
2.if current_time is OUTSIDE certain period from check_time,
  set counter = 0, and check_time = current_time.
3.(otherwise, just leave it the way it is)
4.if counter < LIMIT, counter++ and return TRUE
5.Otherwise return FALSE

しかし、これは実際にサーバーで実行しているスレッドの数とは無関係であるため、この数に応じて接続を許可する方法を考えています。

問題は、実際にはこれにサードパーティの API を使用しており、接続がどれくらい続くか正確にわからないことです。最初は子スレッドを作成し、その上で ps を実行して結果を親スレッドに渡すことを考えましたが、出力結果を解析してスレッドの総数を取得する必要があるため、さらに時間がかかりそうで、など。実際に意味があるかどうかはわかりません..ちなみに、私はc ++を使用しています。新しいチェック方法をどのように実装できるかについて何か提案はありますか? それは非常に高く評価されます。

4

2 に答える 2

0

/proc/[pid]/taskプロセス [pid] に属するスレッドごとに (Linux 2.6.0-test6 以降) ディレクトリが存在します。ドキュメントについてはman procを参照してください。スレッド プールの pid を知っていると仮定すると、それらのディレクトリを数えることができます。

ここで説明されているように、boost::filesystem を使用して C++ からそれを行うことができます。

boost::filesystem を使用してディレクトリ内のファイル数をカウントするにはどうすればよいですか?

Linuxを使用していると仮定しました。

于 2012-05-16T14:23:10.237 に答える