我試圖找到一個很好的方法將數據從NetworkStream(通過C#)寫入文本文件,而「準「同時」從文本文件中將新寫入的數據讀入Matlab。如何優化「實時」C#寫入文件和MATLAB讀取文件操作
基本上,是否有一個好的方法或技術來協調寫入/讀取操作(來自不同的程序),使讀取操作不會阻塞寫入操作(反之亦然),並且連續寫入/讀取之間的延遲是最小化?
目前我只是通過WriteLine循環將數據從網絡流寫入(添加)到文本文件中,並通過循環Matlab的fscanf函數讀取數據,該函數還標記最後一個元素讀取並重新定位文件指針點。的C#代碼
相關部分:
(注:循環條件我使用是任意的,我只是想看看現在的作品右)
NetworkStream network_stream = tcp_client.GetStream();
string path = @"C:\Matlab\serial_data.txt";
FileInfo file_info = new FileInfo(path);
using (StreamWriter writer = file_info.CreateText())
{
string foo = "";
writer.WriteLine(foo);
}
using (StreamWriter writer = File.AppendText(path))
{
byte[] buffer = new byte[1];
int maxlines = 100000;
int lines = 0;
while (lines <= maxlines)
{
network_stream.Read(buffer, 0, buffer.Length);
byte byte2string = buffer[0];
writer.WriteLine(byte2string);
lines++;
}
}
相關的MATLAB代碼:
i=0;
while i<100;
a = fopen('serial_data.txt');
b = fscanf(a, '%g', [1000 1]);
fclose(a);
i=i+1;
end
當我看着讀入Matlab的有實際數據之間的零大片的數據,而最令人不安的部分是連續的數據點,這個數字再這些「虛假零」延伸之間的廣告變化很大。我試圖插入一些延遲(Thread.sleep和等待(timerObject))到C#和Matlab,分別,但即使如此,我不覺得有信心,這將保證我總是獲得收到的數據網絡流,這是勢在必行的。
任何意見/建議將不勝感激。
沒有向char類型的隱式轉換,但是有一個從byte到int。未經測試,但通過該邏輯,您將獲得WriteLine(Int32)調用。 – Voo 2013-04-22 04:23:27
好的,這意味着它不是像我在第一段中想到的那樣的轉換問題;也許只是一個'fscanf'使用問題。 – 2013-04-22 05:09:20
@Voo:刪除了關於字節 - > int32與char轉換的內容。 – 2013-04-22 05:12:08