Erlang队列问题

我正在使用队列api,并遇到错误,它会导致我的程序崩溃。

首先我从字典中获取队列,并在打印输出中返回该队列

获取的队列是[{[],[]}]

这是正常的吗? 队列是否正确创建?

然后,无论我尝试添加队列还是获取其长度,我都会遇到一个错误badargs。

TorrentDownloadQueue = dict:fetch(torrentDownloadQueue, State),
io:format("The fetched queue is  ~p~n", [dict:fetch(torrentDownloadQueue, State)]),
% Add the item to the front of the queue (main torrent upload queue)
TorrentDownloadQueue2 = queue:in_r(Time, TorrentDownloadQueue),
% Get the lenght of the downloadQueue
TorrentDownloadQueueLength = queue:len(TorrentDownloadQueue2),

当我尝试插入值10时,错误是

**终止原因== {{badarg,[{queue,in_r,[10,[{[],[]}]},{ph_speed_calculator,handle_cast,2},{gen_server,handle_msg,5},{函数队列中的badarg:in_r / 2在调用时调用ph_speed_calculator:in_r(10,[{[],[]}]中的队列:in_r / 2:handle_cast / 2 gen_server:从proc_lib调用handle_msg / 5:init_p_do_apply / 3 13>

这是in_r的错误,但是我也为len调用得到了一个badargs错误。

我称呼这些的方式有什么问题,或者是初始队列不正确? 我按如下所示创建队列并将其添加到字典中

TorrentDownloadQueue = queue:new(),
TorrentUploadQueue = queue:new(),
D4 = dict:store(torrentDownloadQueue, [TorrentDownloadQueue], D3),
D5 = dict:store(torrentUploadQueue, [TorrentUploadQueue], D4),

我不知道我做错了什么。


你有什么( [{[],[]}] )是列表中的一个队列。 标准队列看起来像{list(), list()} 。 显然,正因为如此,随后每次对队列的调用都会失败。

我的猜测是你要么排队错,要么以错误的方式提取。


首先,你得到的是一个“badarg”错误。 从Erlang队列的文档中读取:

如果参数的类型是错误的,所有函数都会失败并带有原因badarg,例如队列参数不是队列,索引不是整数,列表参数不是列表。 不正确的列表会导致内部崩溃。 超出范围的索引也会导致故障,原因是badarg。

在你的情况下,你传递给队列:in_r不是队列,而是包含队列的列表。

当您执行以下操作时,您正在将包含队列的列表添加到字典中:

D4 = dict:store(torrentDownloadQueue, [TorrentDownloadQueue], D3),
D5 = dict:store(torrentUploadQueue, [TorrentUploadQueue], D4),

相反,你应该这样做:

D4 = dict:store(torrentDownloadQueue, TorrentDownloadQueue, D3),
D5 = dict:store(torrentUploadQueue, TorrentUploadQueue, D4),
链接地址: http://www.djcxy.com/p/38181.html

上一篇: Erlang queue problems

下一篇: What's the best way to do something periodically in Erlang?