Wake WaitHandle AsycProcessor AutoResetEvent
2010-12-09 03:13
183 查看
namespace Microshaoft { using System; using System.Threading; public class WakeProcessor<TData> { private delegate void ProcessCaller(AutoResetEvent wait, TData data); public delegate void WaitEventHandler(WakeProcessor<TData> sender, TData data); public event WaitEventHandler OnWaitOneTimeout; public event WaitEventHandler OnWaitOneWake; public event WaitEventHandler OnWaitComplete; private int _waitOneTimeoutSeconds = 0; private int _waitTimeoutMinutes = 0; public WakeProcessor ( AutoResetEvent waitHandle , int waitOneTimeoutSeconds , int waitTimeoutMinutes , TData data ) { BeginWaiting ( waitHandle , waitOneTimeoutSeconds , waitTimeoutMinutes , data ); } public void BeginWaiting ( AutoResetEvent waitHandle , int waitOneTimeoutSeconds , int waitTimeoutMinutes , TData data ) { _waitOneTimeoutSeconds = waitOneTimeoutSeconds; _waitTimeoutMinutes = waitTimeoutMinutes; ProcessCaller handler = new ProcessCaller(Process); //AsyncCallback callback = new AsyncCallback(ProcessedCallback); //IAsyncResult result = handler.BeginInvoke(waitHandle, data , null, null); } private void Process(AutoResetEvent wait, TData data) { DateTime beginTime = DateTime.Now; while (DateTime.Now.Subtract(beginTime).TotalSeconds <= _waitTimeoutMinutes * 60) { bool r = wait.WaitOne(_waitOneTimeoutSeconds * 1000); if (r) { if (OnWaitOneWake != null) { OnWaitOneWake(this, data); } } else { if (OnWaitOneTimeout != null) { OnWaitOneTimeout(this, data); } } //if (r) //{ // break; //} } //if (!r) { if (OnWaitComplete != null) { OnWaitComplete(this, data); } } } private void ProcessedCallback(IAsyncResult result) { } } }
相关文章推荐
- 线程同步 - EventWaitHandle & AutoResetEvent & ManualResetEvent
- 线程同步 - EventWaitHandle & AutoResetEvent & ManualResetEvent
- .Net下的线程同步:Part 1 of N--(EventWaitHandle:AutoResetEvent and ManualResetEvent)
- linux内核中等待队列 (函数wait_event与wake_up)
- EventWaitHandle
- linux内核中等待队列(wait_event,wake_up...)
- EventWaitHandle使用方法小记
- 使用EventWaitHandle控制线程间的同步
- 白话并发冲突与线程同步(3)——Mutex、EventWaitHandle、AutoResetEvent 和 ManualResetEvent
- C# EventWaitHandle
- wait_event_interruptible和wake_up_interruptible
- linux内核中等待队列(wait_event,wake_up...)
- c#多线程同步之EventWaitHandle使用
- wait_event_interruptible() 和 wake_up()的使用
- wait_event_interruptible()与wake_up()的使用
- linux等待队列之wait_event和wake_up
- WaitHandle——使用ManualResetEvent
- 稳扎稳打Silverlight(26) - 2.0线程之Lock, Interlocked, EventWaitHandle, Monitor, ThreadStaticAttribute
- 线程学习笔记(EventWaitHandler)AutoResetEvent的使用
- .NET 同步与异步 之 EventWaitHandle(Event通知) (十三)