2016-08-04 17 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