您当前的位置:首页 > 网络编程 > Net编程 > 正文

新一代嵌入式微框架.Net

【字体大小: 2009-07-15 00:00 来源:站长中国 作者:编辑整理 

新一代嵌入式微框架.Net Micro Framework提供了对线程调度的支持,和它的两位前辈(.Net Framework, .Net Compact Framework)相比,Micro Framework并不需要依赖于OS提供的线程管理的服务,因为Micro Framework本身就是一个“类操作系统”。本文介绍了Micro Framework中的多线程原理,以及.Net Micro Framework中WPF的多线程编程。

简介

作为.NET家族的一名新成员,.Net Micro Framework是微软专门针对超轻量级平台(主要是一些低端的32位微处理器)设计的软件架构。其结构如图1:

图1. .Net Micro Framework 架构

.Net Micro Framework有且仅有一条本地执行线程,这条线程上跑的就是.Net Micro Framework CLR(TinyCLR)。TinyCLR是一个可以自己引导的运行环境,和完整版本的.Net一样会管理它自己涉及的内存。所以可以认为.Net Micro Framework不需要依赖操作系统提供线程和内存管理的服务。所以,完全可以把.Net Micro Framework移植到没有OS,甚至没有内存管理单元(MMU)的某些ARM7处理器上。

尽管只在单一的线程上执行,但是CLR要求对驱动的调用“看起来”是异步的,也就是说这些调用会立即返回,而不是一直阻塞直到该任务的硬件I/O完成。这和Windows下的APC(asynchronous procedure call)的实现非常类似。TinyCLR的线程调度依赖于APC的完成模式,APC的实现依赖于图1中PAL层的定时器(Timer)的实现,如图2。

图2. .Net Micro Framework上的异步调用

Micro Framework的基本线程操作

下面先简单介绍几种最基本的,在.Net Micro Framework被支持的线程相关方法:

1. Join

和完整版的.Net Framework一样Micro Framework的System.Threading.Thread类提供了Join方法,所谓join(合并)用于使当前线程等待直至调用该线程的方法执行完毕或者到达指定的等待时间,这里不做多的介绍了。

2. Timer

这里是说System.Threading.Timer类,和完整版的.Net Framework一样它的构造函数中提供了一个TimerCallback委托类型的参数。它告诉线程池要拿出一个线程来按特定的时间或者频率执行这个callback函数。

3. Event

Micro Framework中线程可以用事件的方式来响应, 比如在访问一些共享资源的时候可以使用AutoResetEvent, 通过Wait-Set的组合来同步线程。

以上几种基本操作,在SDK的Threading例程中都有使用,这里不再赘述。

( Microsoft .NET Micro Framework\Samples\Threading )

WPF与Dispatcher

初次接触.Net Micro Framework那WPF风格的UI编程模型时(没有Windows Forms),总是面临着许多性能和安全上的问题。其中很常见的就是数据更新和界面刷新的问题。

典型的有UI的Micro Framework应用程序都会有两个逻辑线程,一个是开发者显式创建用来处理硬件I/O的。另一个是由TinyCLR隐式创建并维护的,它用来处理所有的UI操作,我们姑且把it叫做WPF UI线程例如绘制UI元素,绘制控件和窗体等。

Micro Framework中的UI元素的更新,可以使用Dispacther和DispatcherTimer以线程安全的方式访问UI元素。什么是Dispacther呢?你可以把它看作绑定在上述第二个线程上的一个消息队列,WPF UI线程一直盯着这个队列来接受各种操作命令。你只需要把你的命令,即相关待执行的函数,enqueue到这个队列。即可让这个函数获得线程安全的执行。

    顶一下
    (0)
    0%
    踩一下
    (0)
    0%
    【责任编辑:绝口不提】 标签:

    更多相关内容

    最新评论 查看所有评论
    发表评论 查看所有评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    评价:
    表情:
    用户名:密码:验证码: