Haruyuki Mohri Blog(Delphi)

毛利春幸のブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

delphiには簡単に使えるキューコンテナがあります。

以前の記事で、はやしさんがQueueについて書かれている記事があります。
単純なキューと循環キュー - @IT

DelphiはXE4ぐらい以降(あいまい)に、いろんなコンテナが使えるライブラリを提供しています。
殆どがSystem.Generics.Collections.pasに入ってます。
その中のキュー(TQueue)を試してみました。


procedure TForm1.FormCreate(Sender: TObject);
var
queue: TQueue<String>;
i: Integer;
max_count: Integer;
begin
queue := TQueue<String>.Create;
try
for i := 0 to 10 do
queue.Enqueue(Format('Enqueue(%d)', [i])); //Put in queue.

max_count := queue.Count;

for i := 0 to max_count-1 do
Memo1.Lines.Append( queue.Dequeue ); //remove and calling.
finally
queue.DisposeOf;
end;
end;


文字列をバッファに収納して出すだけです。
シングルスレッドではあまり用事が無いかもしれませんが
入出力のスレッドが別の場合このQueueを使えば管理が楽になります。

System.Generics.Collectionsの中にはTThreadedQueueと言う物もあります。
これの場合は スレッドにキューが貯まりすぎないような工夫が盛り込まれているみたいです。
「AQueueDepth is the length of the queue, which is by default set to 10.」だったりします。

delphiの場合<T>とすると C++のtemplate的な扱いになるみたいです。
template宣言無しです。

今回TQueue<String>ですが、classを作ってQueue<original_class>も可能だと思います。

スポンサーサイト
  1. 2015/08/25(火) 12:36:45|
  2. 未分類

Profile

Twitter...

最近の記事

ブログ内検索

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。