我的伪代码就是这个......
GetData_1()向串口发送请求,收到回复后,GetData_2()发送另一个请求。在接收到第二请求的响应之后,将所有接收的数据一起插入数据库中。然后再次调用GetData_1()以递归方式继续此过程...
但是........ 我得到堆栈溢出错误... 请帮忙......
GetDat_1()
{
//Send a request To SerialPort
//wait a 500 ms.
// read The response and insert it into an array...
GetData_2();
}
GetData_2()
{
// Send a request to SerialPort
// Wait a 500 ms.
// Read The response and insert it into another array
InsertAllData();
GetData_1();
}
InsertAllData()
{
// insert all data into the database
}
答案 0 :(得分:2)
GetData_1()调用GetData_2()调用GetData_1()调用GetData_2()......依此类推,直到你遇到堆栈溢出。
您需要重新设计您的方法才能以其他方式工作
在这种情况下使用某种类型的循环会更好。
答案 1 :(得分:2)
这是因为重复的调用永远不会返回,并且调用堆栈会继续增长,导致StackOverFlowException迟早,最有可能更快。
相反,展开迭代的编码方式。
while (!done)
// GetDat_1 is inlined here
// Send a request To SerialPort
// wait a 500 ms.
// read The response and insert it into an array...
// GetData_2 is inlined here
// Send a request to SerialPort
// Wait a 500 ms.
// Read The response and insert it into another array
InsertAllData();
}
答案 2 :(得分:1)
GetData_1()
和GetData_2()
调用每一个,所以这是一个死循环。并且由于任何方法调用“记录”线程堆栈中的一些数据(方法参数等),这种不定式调用会导致堆栈溢出,因为堆栈不是无限制的。
答案 3 :(得分:0)
问题与串口无关。这可以通过
轻松复制Getdata_1()
{
Getdata_2();
}
Getdata_2()
{
GetData_1();
}
,别无其他。
没有简单的解决方案。您需要阅读有关递归的信息并相应地调整算法。
答案 4 :(得分:0)
您可以尝试使用此示例代码,删除GetData1
和GetData2
方法
while (true)
{
//Send a request To SerialPort
//wait a 500 ms.
// read The response and insert it into an array...
// Send a request to SerialPort
// Wait a 500 ms.
// Read The response and insert it into another array
InsertAllData();
if (/*set true if i want to end the loop*/)
break;
}
答案 5 :(得分:0)
我愿意:
while(!done)
{
//Send request
GetData_1();
//Send request
GetData_2();
InsertAllData();
}
虽然我会设置一个中断来从串口收集数据。