通行证: 用户 密码
http://www.pconline.cn/
汽车网 | 游戏网 | 时尚女性
分站:北京 上海 广州 深圳 香港
广西 重庆 山东 江苏 辽宁 福建
首 页 | 今日报价 | 产业资讯 | 数码世界 | 硬件资讯 | 软件资讯 | 下 载 | 游 戏 |
论 坛 | 产 品 库 | 渠道商情 | 招聘培训 | 二    手 | 评 测 室 | 导 购 | 社 区 |
摄影
部落
手 机
数码相机
随身听
 DIY配件
笔记本
 台式机
摄像机
精品廊
-
您现在的位置:软件资讯 > 开发特区 > .net技术 > C#
  c#多线程教学(4):线程池和异步编程 出处:csdn
[ 2005-07-11 10:02:37 ] 作者:c-sharpcorner 责任编辑:moningfeng

前3章内容回顾:c#.net多线程编程教学(3):线程同步  c#.net多线程编程教学(2):Thread类 c#.net多线程编程教学(1):多任务和多线程

  如果你仔细阅读了我前面的三篇文章,我相信你对用.NET Framework提供的System.Threading.Thread类和一些线程同步的类基本的线程知识和多线程编程知识很了解。我们将在这里进一步讨论一些.NET类,以及他们在多线程编程中扮演的角色和怎么编程。它们是:

  System.Threading.ThreadPool 类

  System.Threading.Timer 类

  如果线程的数目并不是很多,而且你想控制每个线程的细节诸如线程的优先级等,使用Thread是比较合适的;但是如果有大量的线程,考虑使用线程池应该更好一些,它提供了高效的线程管理机制来处理多任务。 对于定期的执行任务Timer类是合适的;使用代表是异步方法调用的首选。

System.Threading.ThreadPool Class

  当你创建应用程序时,你应该认识到大部分时间你的线程在空闲的等待某些事件的发生(诸如按下一个键或侦听套节子的请求)。毫无疑问的,你也会认为这是绝对的浪费资源。

  如果这里有很多的任务需要完成,每个任务需要一个线程,你应该考虑使用线程池来更有效的管理你的资源并且从中受益。线程池是执行的多个线程集合,它允许你添加以线程自动创建和开始的任务到队列里面去。使用线程池使得你的系统可以优化线程在CPU使用时的时间碎片。但是要记住在任何特定的时间点,每一个进程和每个线程池只有一个一个正在运行的线程。这个类使得你的线程组成的池可以被系统管理,而使你的主要精力集中在工作流的逻辑而不是线程的管理。

  当第一次实例化ThreadPool类时线程池将被创建。它有一个默认的上限,即每处理器最多可以有25个,但是这个上限是可以改变的。这样使得处理器不会闲置下来。如果其中一个线程等待某个事件的发生,线程池将初始化另外一个线程并投入处理器工作,线程池就是这样不停的创建工作的线程和分配任务给那些没有工作的在队列里的线程。唯一的限制是工作线程的数目不能超过最大允许的数目。每个线程将运行在默认的优先级和使用默认的属于多线程空间的堆栈大小空间。一旦一项工作任务被加入队列,你是不能取消的。

  请求线程池处理一个任务或者工作项可以调用QueueUserWorkItem方法。这个方法带一个WaitCallback代表类型的参数,这个参数包装了你药完成的任务。运行时自动为每一个的任务创建线程并且在任务释放时释放线程。

  下面的代码说明了如何创建线程池和怎样添加任务:

public void afunction(object o)

{

// do what ever the function is supposed to do.

}

//thread entry code

{

// create an instance of WaitCallback

WaitCallback myCallback = new WaitCallback (afunction);

//add this to the thread pool / queue a task

ThreadPool.QueueUserWorkItem (myCallback);

}


  你也可以通过调用ThreadPool.RegisterWaitForSingleObject方法来传递一个System.Threading.WaitHandle,当被通知或者时间超过了调用被System.Threading.WaitOrTimerCallback包装的方法。

天敏贴纸相框设计大赛,千元大奖等你拿!

[1] [2] [3] [下一页]

正在加载评论,请稍候…

发给好友 我要报错 投稿给我们 加入收藏 返回顶部

本栏今日更新
相关文章
·新品!Gizmo将成为下一个Skype吗?
·Google发布Toobar for Firefox(图)
·警告:旧版Firefox发现高危漏洞
·好用!Outlook,IE语音服务新插件发布
·我与超级兔子魔法设置的"恋爱史"
·7月8日值得注意的病毒列表
·网友的呐喊:流氓软件危害甚于病毒
·微软副总裁给中国大学生的一封信
·c#.net多线程编程教学(3):线程同步
·.NET多线程编程(1):多任务和多线程
·C# 最强大的功能--泛型简介
·用C#屏敝3721网络实名
·利用Visual C#实现Window管道技术
·C#版的冒泡排序算法
·C# 特性(Attribute)入门教程
·用Visual C#打造个性化的IE浏览器

完美时尚娱乐:2004年腾讯QQ评测大观
精彩无限:MSN Shell4使用指南
亲手制作鲜花情人贺卡送给她
挑战伏明霞?企鹅跳水游戏,看你能得多少分?

新闻搜索
高级搜索
Flash排行榜
·趣味游戏-美女更衣
·最新原创-两只小蜜蜂
·恶搞!家猫吃卡
·光良《童话》凄美版
·缘来是你-守侯的处女
·献给失恋的人-嫁给了他
·好玩!汽车连连看
·伤感!下辈子不要做男人
·情感测试-寻找纯情种
·快快快!美眉要迟到了
热点专题
·玩转MSN技巧,带给您好心情!
·电脑艺术设计大师之路连载
·老歌歪唱Flash MV爆笑欣赏
·2005年XP SP2全新技巧放送
·视频轻松学Dreamweaver教程
·瞩目!QQ2005 Beta1火热发布
·全面了解FireFox浏览器
·情人节感动MM的十首MV
·武装你的QQ:QQ辅助软件使用指南
·奋勇抗争:向"流氓软件"大声说不!
·含泪惜别!毕业十大必唱歌曲
·想不到?常用软件的另类用法
IT培训十大热门文章
-