0

一部のデータ入力を自動化しようとしているので、tcp クライアントとサーバーを実装しました。クライアントはファイル名を送信し、サーバーは共有フォルダーに入り、そのファイルをデータベースにインポートします。

私の問題は、ファイル名が「データベースへのインポート」よりも速い速度で送信される可能性があることです。だから私はキューを作成し(サイズを設定する方法がわかりません)、ファイル名をキューにプッシュしてから実行します

PushToDatabase(filename);

私がやろうとしていることは次のとおりです。

queue<string> q;
char *data = new char[1024];
ReadFromClient(data);
//now 'data' has a filename
q.push(data);
PushToDatabase(q.front());  // I want to execute this in the background
q.pop();

これを機能させるためにスレッドを実装する必要があるかどうかはわかりません

他のアイデア??

4

2 に答える 2

1

複数のスレッドを使用できます。同期の問題には十分注意してください。

別の方法として、(シングルスレッドの)イベント ループを使用することもできます。poll(2)のような多重化システムコールの上に(痛々しいほど)自分で書くことができます。

Advanced Linux Programmingもお読みください。

また、 libeventlibev、Glib (GTK から)、QtCore (Qt から)、libsigc++などのイベント ループ ライブラリを使用することもできます。

C10Kクロージャコールバック、および継続渡しスタイルについて読むと、何らかの関連性があり、潜在的な問題や用語について理解が深まる可能性があります。C++1には無名関数(つまりクロージャ)があることに注意してください。

于 2013-09-18T17:22:09.180 に答える