當前位置:編程學習大全網 - 編程軟體 - 雙線程拷貝: 同步讀寫,壹個線程用來讀數據,壹個用寫數據;

雙線程拷貝: 同步讀寫,壹個線程用來讀數據,壹個用寫數據;

我們來玩個新東西把!微軟的Rx(Reactive Extensions)異步編程模型,妳這要求用這玩意做到方便

核心代碼:(沒有文本,所以我這裏模擬讀取數據部分,妳可以自己補齊全文件讀寫部分,其他詳細部分,參考附件項目,)

?var?realSource?=?Observable.FromEvent<MyData>(a?=>?real.OnData?+=?a,?a?=>?real.OnData?-=?a);

//?每兩秒生成假數據的可觀察源

var?dummySource?=?Observable.Interval(TimeSpan.FromSeconds(2))

.Select(_?=>?new?MyData?{?IsDummy?=?true,?Timestamp?=?DateTime.Now,?Value?=?0?});

var?n?=?5;

//?合並真假源,取每1s的時間窗口內的數據,如果存在真數據,就把假數據剔除(這樣理論上相鄰數據之間的間隔不會超過3s)

//?緩存每n秒的數據訂閱輸出(壹次寫多條數據到數據庫性能好點)

var?sub?=?realSource.Merge(dummySource).Buffer(TimeSpan.FromSeconds(1)).SelectMany(buf?=>

{

if?(buf.Any(d?=>?!d.IsDummy))

buf?=?buf.Where(d?=>?!d.IsDummy).ToList();

return?buf;

}).Buffer(TimeSpan.FromSeconds(n)).Subscribe(buf?=>

{

//?訂閱數據,輸出(或保存到數據庫)

foreach?(var?d?in?buf)

{

this.textBox1.Invoke(new?Set_Text(setText),d);

}

});

real.Start();?//?啟動真實數據接收

  • 上一篇:java程序員新手壹般面試什麽問題 知乎
  • 下一篇:Linux內核編程的內容簡介
  • copyright 2024編程學習大全網