2016-08-04 50 views
-1

我写3200辆花车,像这样:交流电插座多个调用来读

float fft[3200] = {0}; 
get_fft_frame(dev, fft, 3200); // rf sensor 
int written = write(sd, fft, sizeof(fft)); 

和阅读则是这样的:

float *fft = new float[3200]; 
int inRead = 0; 
while (inRead < (3200*4)) { 
    //sleep(1); 
    int bytesRead = read(sd, fft + inRead, (3200*4) - inRead); 
    inRead += bytesRead; 
} 

所有的数据都写在1个写,但它需要两个读调用来获取所有数据。第一次读取返回11584,第二次返回1216.

问题是第二次读取调用只读取零。但是,如果我取消了睡眠呼叫的注释,它会读取所有正确的数据。

有没有更好的方式来获得没有睡觉的数据?

+0

您是否必须使用套接字,或者您是否可以使用其他形式的进程通信?管道可能是你正在寻找,因为他们阻止。 –

+1

您需要向我们展示套接字是如何设置的。也就是说,提供一个[mcve]。但对于初学者,您需要检查'read'的返回值。 'read'可能会返回错误的'-1',在这种情况下,您不应该将它添加到'inRead'中。如果正确实施,多个'read'调用应该没有问题。所以我们需要看*完整*代码。 – kaylum

+0

是的,我已经深入该项目的重新因素,如 – nicolas

回答

0

你在混合你的偏移。 inRead以字节为单位进行度量,但当您将其添加到fft时,它将按照指针算术规则乘以sizeof floatread()调用中的偏移量表达式应为

((char*)fft)+inRead 
+0

哦,男人,谢谢你,工作。 – nicolas