在释放数据之前,请先将阵列填满
Make the array full before releasing data
我正在实现一个函数,该函数通过蓝牙接收数据并在数组unsigned char buf[10]
中返回数据。这是我的函数,每x毫秒通过QTimer
:调用一次
void gui::listen_device()
{
unsigned char crcval;
int count = 0;
fd_set readmask;
struct timeval tv;
int v = 0, v1 = 0, v2 = 0;
tv.tv_sec = 0;
tv.tv_usec = 100000;
int i;
memset (buf, 0, 10);
FD_ZERO (&readmask);
FD_SET (sock, &readmask);
if (select (255, &readmask, NULL, NULL, &tv) > 0)
{
if (FD_ISSET (sock, &readmask))
{
numb = read (sock, buf, 10);
// print of counter
printf ("%d ->", buf[0]);
fprintf (data, "%d,", buf[0]);
for (i = begin; i < numb-1; i++)
{
v = buf[i];
printf ("%d,", v);
fprintf (data, "%d,", v);
}
//---------------//
crcval = BP_CRC8(buf,9);
printf(" crcf=%x crcc=%x", buf[9], crcval);
if (crcval == buf[9])
{
printf("crc okn");
begin = 1;
}
else
{
printf("crc failn");
begin = numb -1;
}
//---------------//
printf ("n");
fprintf (data, "n");
}
}
}
我希望函数只有在buf
已满时才返回。所以我创建了一个全局变量begin
,如果上次计时器到来时buf
没有满。
这是.txt
文件中的输出。
0,0,0,0,0,0,0,0,0,
1,0,0,0,0,0,0,0,0,
2,0,0,0,0,0,0,0,0,
3,0,0,0,0,0,0,0,0,
4,0,0,0,0,0,0,
0,
5,0,0,0,0,0,0,0,0,
6,0,0,0,0,0,0,0,0,
7,0,0,0,0,0,0,0,0,
8,0,0,0,0,0,0,0,0,
9,0,0,
0,0,0,
10,0,0,0,0,
11,0,0,0,0,0,0,0,0,
12,0,0,0,0,0,0,0,0,
13,0,0,0,0,0,0,0,0,
14,0,0,0,0,0,0,0,0,
15,0,0,0,0,0,0,0,0,
16,0,0,0,0,0,0,0,0,
它不时地向我返回一个不完整的CCD_ 7。
IMHO,您必须更改程序的架构。这里有很多洞。
- 您每x毫秒调用一个函数,其中保证在下一个x毫秒发生时完成
- 您从gui运行侦听--所以,您的gui正在等待,而不是在这里重新绘制。在后台执行
- 如果你说,那个函数返回一些东西——你的
return
在哪里?重写代码
希望这些建议对您有所帮助!祝你好运
相关文章:
- 释放错误后堆使用
- OpenMP阵列性能较差
- G锁定铸造到基础上会释放模拟行为
- 在将变量声明为引用时,堆在释放后使用
- 如何将三维尺寸不固定的三维阵列展平为一维阵列
- 当我的阵列太大时出现分段错误
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 位阵列上的快速AND运算
- 正在理解智能指针,但出现错误:未分配正在释放的指针
- 阵列必须使用大括号封闭的初始器进行初始化
- 如何释放子阵列的mem,它是更大数组的一部分
- 如何释放阵列内存
- 在JNI呼叫中使用后,应删除/释放JarrayObject(字符串阵列)
- 无法从阵列队列中手动释放内存
- 重新分配已删除的阵列并读取释放的内存
- 动态分配的阵列,双释放或损坏
- 在函数中定义一个动态数组,然后返回数组元素。如何释放阵列的内存?
- 自动释放阵列
- 在释放数据之前,请先将阵列填满
- 如何为Boost多阵列释放内存