CLR线程池教程四大功能详解(2)
来源:互联网 发布:纹绣师上门软件 编辑:程序博客网 时间:2024/04/30 17:06
http://blog.sina.com.cn/s/blog_8d22eb930100tkc2.html
(文档下载地址:http://www.ctdisk.com/file/1758317)
功能 3:CLR线程池教程之当单个内核对象得到信号通知时调用方法
要让线程池线程在内核对象得到信号通知时调用您的回调方法,您可以再次利用 System.Threading.ThreadPool 类中定义的一些静态方法。要让线程池线程在内核对象得到信号通知时调用方法,您的代码必须调用一个重载的 RegisterWaitHandle 方法,当您调用这些方法之一时,h 参数标识出您想要线程池等待的内核对象。由于该参数是抽象基类 System.Threading.WaitHandle,因此您可以指定从该基类派生出来的任何类。特别地,您可以将一个引用传递给 AutoResetEvent、ManualResetEvent 或 Mutex object。第二个参数 callback 标识出您想要线程池线程调用的方法。您实现的回调方法必须与 System.Threading.WaitOrTimerCallback 委托类型相匹配,其定义如下列代码行所示:
- public delegate void WaitOrTimerCallback(Object state,
- Boolean timedOut);
第三个参数 state 允许您指定应传递给回调方法的某些状态数据,如果没有特别的状态数据要传递,则传递 null。第四个参数 milliseconds 允许您告诉线程池内核对象得到信号通知前应该等待的时间。这里通常传递 -1,以表示无限超时。如果最后一个参数 executeOnlyOnce 为真,那么线程池线程将仅执行回调方法一次。但是,如果 executeOnlyOnce 为假,那么线程池线程将在内核对象每次得到信号通知时执行回调方法。这对 AutoResetEvent 对象非常有用。
在前面所示的原型中,您会注意到 RegisterWaitForSingleObject 方法返回一个 RegisteredWaitHandle 对象。该对象确定线程池在等待的内核对象。如果由于某种原因,您的应用程序要告诉线程池停止监视已注册的等待句柄,那么您的应用程序就可以调用 RegisteredWaitHandle 的 Unregister 方法:
- public Boolean Unregister(WaitHandle waitObject);
waitObject 参数表明当执行完队列中的所有工作项后,您想如何得到信号通知。如果不想得到信号通知,那么您应将 null 传递给该参数。如果您将一个有效引用传递给 WaitHandle-derived 对象,那么线程池会在已注册等待句柄的所有挂起工作项执行完后,通知该对象。
小结
在本专栏中,我讲述了对线程池的需要,说明了如何利用 CLR 线程池提供的各种功能。现在您应该明白线程池为您的开发所带来的价值,它可以提高您的应用程序的性能,并简化您的代码。
教程下载
- CLR线程池教程四大功能详解(2)
- CLR线程池教程四大功能详解(1)
- 四大线程池详解
- 四大线程池详解
- 四大线程池详解
- 四大线程池详解
- 四大线程池详解
- 四大线程池详解
- 四大线程池详解
- 四大线程池详解
- 四大线程池详解
- java四大线程池详解
- CLR 的线程池
- CLR 的线程池
- CLR 的线程池
- CLR 的线程池
- CLR 的线程池
- CLR 的线程池
- MTK平台T卡容量的访问
- 浅谈静态字段与静态构造函数之间的初始化关系以及执行顺序
- linux api笔记(1):判断文件是否存在
- 一个超好用的favicon 图标在线制作地址,强烈推荐
- CLR线程池教程四大功能详解(1)
- CLR线程池教程四大功能详解(2)
- Hook按键消息修改
- HashMap中put与get的实现
- Windows CE LCD显示驱动简析(2)(基于WinCE5.0 SMDK2410 BSP的LCD显示设备驱动)
- Winedt 使用常识
- 黑人解放运动
- Parse Fatal Error at line 1 column 7: The processing instruction target matching "[xX][mM][lL]" is not allowed.
- oprofile的使用方法
- 不知所云