【发布时间】:2012-08-20 08:21:41
【问题描述】:
如何创建一个可以容纳数组的队列,而不是具有可变行数的数组。
char data[n][2][50];
//Could be any non 0 n e.g:
n=1; data = {{"status","ok}};
// or
n=3; {{"lat", "180.00"},{"long","90.123"},{"status","ok}};
// and so on
n 要添加到队列中。还是有比我要求的更好的解决方案?队列很容易为单个数据项编写(或找到可重用的示例),但我不确定我会为上述使用什么方法。也许是一个结构?这将解决数组和 n...但它会解决变量数组吗?
更广泛地说,我要解决的问题是这个。 我需要使用 POST 与 Web 服务器通信。我已经编写了此代码,但是我不想每次需要执行此任务时都让主线程忙,尤其是因为我需要进行其他检查,例如连接是否正常,如果不需要的话退出并等待或尝试重新上线。
我的想法是有一个单独的专用于这项任务。我认为创建队列是主线程让子线程知道该做什么的最佳方式。
数据将是可变数量的字符串对。喜欢:
主要
//Currently does
char data[MAX_MESSAGES_PER_POST][2][50];
...
assembles array
sendFunction(ptrToArray, n);
resumes execution with large and un predicatable delay
//Hopefully will do
...
queue(what needs doing)
carry on executing with (almost) no delay
孩子
while(0)
{
if(allOtherConditionsMet()) //Device online and so forth
{
if(!empty(myQueue))
{
//Do work and deque
}
}
else
{
//Try and make condition ok. Like reconect dongle.
}
// sleep/Back off for a while
}
【问题讨论】:
-
有什么理由要从头开始编写队列吗?当有经过良好测试的标准 ADT 可用时,实现自己的 ADT 通常是个坏主意。你会花时间去寻找细微的错误,并且通常会编写与某人已经编写过的代码相同的代码。您是否考虑过使用提供队列的库?
-
@ArjunShankar 不,你有解决我问题的 C99 库的示例或链接吗?我没有找到一个,虽然我想这更有可能是我搜索能力差的结果。由于这是一个爱好项目,我不介意自己编写它,但是你是对的,预先测试的库可能更好。
-
@ArjunShankar 虽然你是对的,但大多数资深程序员多年来都积累了自己的生产质量 ADT 库......所以他不妨开始研究它,越早越好。这很奇怪,但是没有广泛认可的 C 语言 ADT 库,没有像 STL、Boost 等那样。我认为 Glib 永远不会获得这种认可,除非其中一家微软规模的公司采用它。跨度>