gpt4 book ai didi

delphi - 如何操作 Collections.TQueue 顺序?

转载 作者:行者123 更新时间:2023-12-03 18:26:47 29 4
gpt4 key购买 nike

我有一个队列,我在其中存储要传输的数据包:

TfrmFoo = class(TForm)
public
tx_queue: System.Generics.Collections.TObjectQueue<TPacket>;

有时我需要对具有最高优先级的数据包进行排队。我会这样做:
for i := 0 to tx_queue.Count do
// Shift all queue items one space up the queue.
tx_queue.FItems[tx_queue.Count - i + 1] :=
tx_queue.FItems[tx_queue.Count - i];
// Add a packet to the--now vacant--top-most position.
tx_queue.FItems[0] := VipPacket;

不幸的是, FItems是私有(private)的,所以我无权访问它:
E2361 Cannot access private symbol {System.Generics.Collections}TQueue<Comm.TPacket>.FItems

我怎样才能在不滚动我自己的 FIFO 队列数据结构的情况下做我所描述的事情,因为我仍然希望能够使用 stdlib 提供的所有功能?

更新 :拥有 2 个队列是一种解决方案,但在我的代码中还有一个地方我需要访问队列项目,例如我在哪里打印队列:
DebugMsg('Contents of Tx-Queue:');
for i := 0 to (tx_queue.Count - 1) do
DebugMsg(tx_queue.FItems[i]);

或者一个遍历队列并计算有多少特定 ID 的数据包已排队的函数。

最佳答案

队列并不意味着以您想要操作数据结构的方式进行操作。使用 TList 反而。使用Add把东西放在后面,Insert把东西放在前面,ExtractItem(0)获取第一个项目。

关于delphi - 如何操作 Collections.TQueue 顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28150649/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com