2016-06-18 5 views
-1

私はdequeの構造体を持っていました(それぞれのidとstd::chrono::time_point<std::chrono::system_clock>のタイムスタンプを含んでいます)。あるタイムアウトの後、経過時間のある構造体がdequeから削除されました。クラスオブジェクトの両端キューを作成する方法は?

は、私は別のアプローチを考えた:代わりに一つ一つの構造体のタイムアウトをチェックするdequeをループ糸を有するので、私はdeque内のオブジェクトクラスを置くことがあります。このクラスのコンストラクタが呼び出されたときとオブジェクトはdequeにプッシュされますが、このクラスのメソッドが呼び出されます。オブジェクトは、それが「`condition_variableで待機しているスレッドにシグナルを送り、スリープ状態から再開したとき、このメソッドは、std::this_thread::sleep_for(std::chrono::milliseconds(/*#define TIMETOUT*/));のオブジェクト睡眠を行います。

私はクラスオブジェクトのキューについて、(私はラッパークラスを発見作った)questionを読んで、私はいくつかのことを理解していない:私はdequeから削除すると、何が返されますか?リファレンス?オブジェクト自体?別のdequeに挿入する必要があるため、オブジェクトを削除する必要があります。 ラッパーが本当に必要な場合、私の目的に合ったクラスを適切に作成するにはどうすればよいですか?

+3

あなたのタイトルはあなたが求めている実際の質問に対してより適切にするだろうか? – juanchopanza

答えて

1

まず、スリープ機能の任意の種類は、文句を言わないあなたを助ける:それは全体のスレッドではなく、オブジェクトをフリーズします。スレッドが何であるか、どのように使用するのかわからない場合、プログラムはシングルスレッドであり、スリープ機能を呼び出すとプログラム全体がフリーズします。

はその後、あなたが両端キューから何かを消去するとき、deque::erase()キューの次のオブジェクトを指すイテレータを返します。これは、ループ内のキューを反復処理して何かを削除したい場合に便利です。

あなたがどこかにオブジェクトをコピーしたい場合は、まずそれをする必要があります。削除した後は、コピーを作成する方法はありません。

最後に、ラッパークラスについて:私はあなたがここでそれらを使用する必要があります理由はわかりません。最初のキューからオブジェクトを削除する前に、別のキューにオブジェクトを手動で追加することができます。

+0

それから、前の 'struct'に戻ってコントローラスレッドを起動します。 'struct'またはオブジェクトクラスの間で何が最善であるかを知るにはどうすればいいですか? オブジェクトクラスの代わりに 'struct'を選択する理由は何ですか? – elmazzun

+0

@elmazzunいいえ、おそらく別のスレッドは必要ありません。それは物事をより困難にするだけです。構造体とクラスについて - より便利なものを選択してください。 – HolyBlackCat

関連する問題