On 03/09/2020 16:36, Bo Berglund via fpc-pascal wrote:
A "simplest case" usage example would be nice to have.
True. Once you got enough info from this thread, please write one.

I still when looking at the sources have no clue as to how it would be
used...

It seems to me like at the very least one should define what type of
data will be stored in the buffer...
Is this how you use it?

var
   MyFifoBuffer: TLazThreadedQueue;  77Whgat do I do about the <T>???

Ok, I see. It's a generic, so this question is not directly related to the TLazThreadedQueue

type
  TMyData = class
      FData: array of byte;
   end;
  TMyThreadedQueue = specialize TLazThreadedQueue<TMyData>;

var
  a: TMyData
  q: TMyThreadedQueue

q := TMyThreadedQueue.create($8000);
a := TMyData.Create;
q.PushItem(a);


Of course you can do
  TMyData = array of byte;  // or record .... end if you want
  TMyThreadedQueue = specialize TLazThreadedQueue<TMyData>;

or even
  TMyThreadedQueue = specialize TLazThreadedQueue<Byte>;

Pushing arrays (dyn ar stat) is fine.

Pushing individual bytes => works. And if you get a byte once or twice in a second then it is ok.

If you get bytes every few milliseconds or faster, then pushing bytes may be too expensive (I don't know, but I would expect at some point....). In order to push (or pop) the queue has to obtain a lock. You have to make sure your computer can handle that fast enough. (maybe it can....)




And how do you use ShutDown, DoShutDown, QueSize and Grow?

Very confused.

Grow gives a positive/negative delta. It is added to the current size.
But as I said, for this to work you need the patches.
Also "grow" on a live queue, requires to get the lock yourself. This is not automated. (Might be an idea to add that....)

- If the queue is full then PushItem will wait until timeout, or until something is popped.
- if the queue is empty PopItem will wait in that manner.
If threads are waiting, and ShutDown is called, then Push/PopItem return wrAbondoned. (So you need to check for this)

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to