0

私のプログラム(linux C)でsqliteテーブルを構築したい:

3 つの列/フィールドがあります。

1 IP/ポート ペア、2 FIFO キュー ポインタ、3 プロセス ID またはスレッド ID

私は今sqliteに慣れていません.sqliteテーブルを作成した場合、それは可能ですか:

行が sqlite テーブルに挿入されると、1 回限りのタイムアウト タイマーが開始されます。イベントが予期されない場合 (行が作成されたときに 3 番目のフィールドが null の場合、プロセスまたはスレッドが 3 番目のフィールドを埋めるのを待ちます)。タイムアウト内に行が削除されます。タイムアウト タイマーは 1 回限りであるため、行がテーブルに挿入された後に 1 回だけ使用されます。

もしそうなら、同様のソースコードはありますか? ありがとう!</p>

4

1 に答える 1

0

データベースは永続ストレージ用です。DB に追加してから削除する代わりに、プログラム メモリを一時的なストレージとして使用します。プロセスは次の 4 つのステップで中断できます。

  1. メインスレッドから、完了するオブジェクトをキューに入れます。
  2. 不足しているフィールドを埋める必要があるスレッドを起動または通知します。ワーカー スレッドは、キューからオブジェクトを読み取って変更し、1 秒後に終了します。
  3. メイン スレッドで、1 秒待ちます (またはワーカー スレッドが終了するのを待ちます)。
  4. メイン スレッドからキュー内のオブジェクトをチェックします。ワーカー スレッドが不足しているフィールドを埋めることができた場合は、オブジェクトをキューからデータベースにコミットします。それ以外の場合は、それらをキューから破棄します。

もちろん、スレッドセーフなキューが必要です。この Stackoverflow の回答を参照してください。

于 2013-05-12T10:47:03.740 に答える