日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
.NetMicroFramework線程技術詳解

嵌入式微框架.Net Micro Framework提供了對線程調度的支持,和它的兩位前輩(.Net Framework, .Net Compact Framework)相比,Micro Framework并不需要依賴于OS提供的線程管理的服務,因為Micro Framework本身就是一個“類操作系統(tǒng)”。本文介紹了Micro Framework中的多線程原理,以及.Net Micro Framework中WPF的多線程編程。

網站建設哪家好,找創(chuàng)新互聯(lián)建站!專注于網頁設計、網站建設、微信開發(fā)、重慶小程序開發(fā)、集團企業(yè)網站建設等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了迎澤免費建站歡迎大家使用!

簡介

作為.NET家族的一名新成員,.Net Micro Framework是微軟專門針對超輕量級平臺(主要是一些低端的32位微處理器)設計的軟件架構。其結構如圖1:

圖1. .Net Micro Framework 架構

 .Net Micro Framework有且僅有一條本地執(zhí)行線程,這條線程上跑的就是.Net Micro Framework CLR(TinyCLR)。TinyCLR是一個可以自己引導的運行環(huán)境,和完整版本的.Net一樣會管理它自己涉及的內存。所以可以認為.Net Micro Framework不需要依賴操作系統(tǒng)提供線程和內存管理的服務。所以,完全可以把.Net Micro Framework移植到沒有OS,甚至沒有內存管理單元(MMU)的某些ARM7處理器上。

盡管只在單一的線程上執(zhí)行,但是CLR要求對驅動的調用“看起來”是異步的,也就是說這些調用會立即返回,而不是一直阻塞直到該任務的硬件I/O完成。這和Windows下的APC(asynchronous procedure call)的實現(xiàn)非常類似。TinyCLR的線程調度依賴于APC的完成模式,APC的實現(xiàn)依賴于圖1中PAL層的定時器(Timer)的實現(xiàn),如圖2。

圖2. .Net Micro Framework上的異步調用

Micro Framework的基本線程操作

下面先簡單介紹幾種最基本的,在.Net Micro Framework被支持的線程相關方法:

1.Join

和完整版的.Net Framework一樣Micro Framework的System.Threading.Thread類提供了Join方法,所謂join(合并)用于使當前線程等待直至調用該線程的方法執(zhí)行完畢或者到達指定的等待時間,這里不做多的介紹了。

2.Timer

這里是說System.Threading.Timer類,和完整版的.Net Framework一樣它的構造函數(shù)中提供了一個TimerCallback委托類型的參數(shù)。它告訴線程池要拿出一個線程來按特定的時間或者頻率執(zhí)行這個callback函數(shù)。

3.Event

Micro Framework中線程可以用事件的方式來響應, 比如在訪問一些共享資源的時候可以使用AutoResetEvent, 通過Wait-Set的組合來同步線程。

以上幾種基本操作,在SDK的Threading例程中都有使用,這里不再贅述。

WPF與Dispatcher

初次接觸.Net Micro Framework那WPF風格的UI編程模型時(沒有Windows Forms),總是面臨著許多性能和安全上的問題。其中很常見的就是數(shù)據(jù)更新和界面刷新的問題。

典型的有UI的Micro Framework應用程序都會有兩個邏輯線程,一個是開發(fā)者顯式創(chuàng)建用來處理硬件I/O的。另一個是由TinyCLR隱式創(chuàng)建并維護的,它用來處理所有的UI操作,我們姑且把it叫做WPF UI線程例如繪制UI元素,繪制控件和窗體等。

Micro Framework中的UI元素的更新,可以使用Dispacther和DispatcherTimer以線程安全的方式訪問UI元素。什么是Dispacther呢?你可以把它看作綁定在上述第二個線程上的一個消息隊列,WPF UI線程一直盯著這個隊列來接受各種操作命令。你只需要把你的命令,即相關待執(zhí)行的函數(shù),enqueue到這個隊列。即可讓這個函數(shù)獲得線程安全的執(zhí)行。

下面我們通過一個時鐘的例子來說明如何在Micro Framework中使用Dispatcher,在本例中我們會在一條單獨的線程上更新畫面上的文本。打開Visual Studio創(chuàng)建一個Micro Framework的windows程序

首先,在main函數(shù)之外,我們定義一個文本和負責更新它的線程:

 
 
 
 
  1. private Text text;  
  2. private Thread updateThread;  

然后,我們需要為這個更新操作定義一個委托,這個委托的實例將被用來添加到WPF UI的“消息隊列”中去:

 
 
 
 
  1. ///   
  2. /// 用來更新文本的委托  
  3. /// 
  4.  
  5. ///  新文本  
  6. public delegate void UpdateTextDelegate(String newText);  

然后我們需要一個該委托的實例指向的實際函數(shù),它非常簡單:

 
 
 
 
  1. public void UpdateText(String newText)  
  2.  {  
  3.      text.TextContent = newText;  
  4.  }  

接下來我們還需要讓UpdateThread做點什么,就是要它通過Dispatcher來完成這個異步的線程安全的UI更新:

 
 
 
 
  1. public void UpdateTextThread()  
  2.         {  
  3.             while (true)  
  4.             {  
  5.                 this.Dispatcher.BeginInvoke(new UpdateTextDelegate(UpdateText),   
  6. new object[] { DateTime.Now.ToString("hh:mm:ss") });  
  7.                 // 休眠1秒  
  8.                 Thread.Sleep(1000);  
  9.             }  
  10.         }  

***,我們要在CreatWindow方法返回前,添加如下代碼以啟動上述線程:

 
 
 
 
  1. updateThread = new Thread(new ThreadStart(UpdateTextThread));  
  2.             updateThread.Start(); 

其運行效果如下:

 這種有周期的調用方式,還可以使用DispatcherTimer來處理,此時唯一需要改變的是UpdateText的簽名,使之符合EventHander的格式:

 
 
 
 
  1. public void UpdateText(object sender, EventArgs e)  
  2. {  
  3.     text.TextContent = DateTime.Now.ToString("hh:mm:ss");  

使用DispatcherTimer非常簡單:

 
 
 
 
  1. dispatchTimer = new DispatcherTimer(textView.Dispatcher);  
  2.  dispatchTimer.Tick += new EventHandler(UpdateText);  
  3.  dispatchTimer.Interval = new TimeSpan(0, 0, 1);  
  4.  dispatchTimer.Start();  

Micro Framework并不勝任所有情況

對于一些高吞吐量,且對實時性要求比較高的情景(比如一個需要對音頻數(shù)據(jù)流編解碼輸出CD音質的設備),使用Micro Framework設備做這些工作并不是一個好的選擇。要滿足這樣的需求,你可以使用一些輔助的處理器(比如DSP),通過SPI或者I2C連接到Micro Framework設備。讓它們去做繁重的數(shù)據(jù)處理工作,而使用Micro Framework來創(chuàng)建友好的UI并承擔一些非嚴格實時性的工作。

另外一種方式就是把Micro Framework移植到一個多線程實時操作系統(tǒng)上,然后把那些實時性高的代碼交給一條高優(yōu)先級的線程去跑。

總結

NET Micro Framework 將 .NET 的可靠性和效率與 Visual Studio的高生產率結合起來,以針對價格較低、資源受限的小型設備開發(fā)應用程序,可幫助人們使用熟悉的 Visual Studio 工具來構建托管的嵌入式應用程序。從中你可以發(fā)現(xiàn)使用托管代碼以OO的方式在嵌入式設備上面編寫擁有漂亮的UI的多線程程序是如此簡單自然。也許你再也不想回到過去那Win32或者POSIX風格的代碼中去了。同時要注意Micro Framework的適用范圍,注意避免由MF直接承擔一些實時性較高的,大數(shù)據(jù)量的任務。


網站欄目:.NetMicroFramework線程技術詳解
網站路徑:http://www.5511xx.com/article/cdghpoc.html