EventWaitHandle 自己的小结
2012-11-06 17:53
281 查看
一直对于实例化EventWaitHandle对象是后传入是否为终止状态,手动或者自动的情况不是很清楚,所以,研究了一下做个笔记。
EventWaitHandle各个线程程之间互通信号。
首先:如果事件初始为终止状态,首次waitone()时候不进行线程阻塞,为非终止状态时候,首次waitone()时候进行线程阻塞。当然,该状态也要结合一下的EventResetMode的值进行结合使用。
EventResetMode.AutoReset 自动重置,也就是自动重置事件状态,自动的话,他会在首次waitone之后立即改变事件为非终止状态。就像这样{如果手动重置事件的初始化为终止状态,则首次waitone()不进行线程阻塞,但是会立即改变事件状态的状态为非终止状态,当以后waitone()的时候,都会阻塞线程}
EventResetMode.ManualReset 手动重置,它对于线程的阻塞决定于上一个参数是否为终止状态,也就是说,如果初始值设置为终止状态,则它的线程如果不手动进行手动设置,则一直不进行线程阻塞,如果初始值是非终止状态,则每个waione()都会阻塞,除非手动使用set()之类的方法设置为终止状态为止。
下面贴出代码示例:
EventWaitHandle各个线程程之间互通信号。
首先:如果事件初始为终止状态,首次waitone()时候不进行线程阻塞,为非终止状态时候,首次waitone()时候进行线程阻塞。当然,该状态也要结合一下的EventResetMode的值进行结合使用。
EventResetMode.AutoReset 自动重置,也就是自动重置事件状态,自动的话,他会在首次waitone之后立即改变事件为非终止状态。就像这样{如果手动重置事件的初始化为终止状态,则首次waitone()不进行线程阻塞,但是会立即改变事件状态的状态为非终止状态,当以后waitone()的时候,都会阻塞线程}
EventResetMode.ManualReset 手动重置,它对于线程的阻塞决定于上一个参数是否为终止状态,也就是说,如果初始值设置为终止状态,则它的线程如果不手动进行手动设置,则一直不进行线程阻塞,如果初始值是非终止状态,则每个waione()都会阻塞,除非手动使用set()之类的方法设置为终止状态为止。
下面贴出代码示例:
class Program { //static EventWaitHandle wait = new EventWaitHandle(true, EventResetMode.AutoReset); //自动 中止状态 static EventWaitHandle waitM = new EventWaitHandle(false, EventResetMode.ManualReset);//手动 非终止状态 static void Main(string[] args) { Console.WriteLine("1当前时间" + DateTime.Now); Thread thread = new Thread(S); thread.Start(); Thread.Sleep(3000); //wait.Set();//将状态设置为终止状态。 waitM.Set(); //将状态设置为终止状态。 Console.Read(); } public static void S() { waitM.WaitOne(3000); //非终止状态,无限制阻塞线程,不自动改变事件的终止状态 //wait.WaitOne(); //自动返回为终止状态,不阻塞线程,为同一时间 Console.WriteLine("2当前时间" + DateTime.Now); waitM.WaitOne(3000); //前面的set()将事件手动终止状态,不进行阻塞 // wait.WaitOne(3000); //此时为非终止状态,停顿三秒 Console.WriteLine("3当前时间" + DateTime.Now); } }
相关文章推荐
- EventWaitHandle
- 稳扎稳打Silverlight(26) - 2.0线程之Lock, Interlocked, EventWaitHandle, Monitor
- 白话并发冲突与线程同步(3)——Mutex、EventWaitHandle、AutoResetEvent 和 ManualResetEvent
- 稳扎稳打Silverlight(26) - 2.0线程之Lock, Interlocked, EventWaitHandle, Monitor, ThreadStaticAttribute
- 白话并发冲突与线程同步(3)——Mutex、EventWaitHandle、AutoResetEvent 和 ManualResetEvent
- 白话并发冲突与线程同步(3)——Mutex、EventWaitHandle、AutoResetEvent 和 Manua (2012-05-18 13:16:12)
- 基元线程同步——内核模式构造(WaitHandle,EventWaitHandle,AutoResetEvent,ManualResetEvent,Semaphore,Mutex)
- WaitHandle——使用ManualResetEvent
- 线程(六)EventWaitHandle
- 白话并发冲突与线程同步(3)——Mutex、EventWaitHandle、AutoResetEvent 和 ManualResetEvent
- c# 多线程 创建跨进程的EventWaitHandle 源码
- .Net下的线程同步:Part 1 of N--(EventWaitHandle:AutoResetEvent and ManualResetEvent)
- 【深度好文】多线程之WaitHandle-->派生EventWaitHandle事件构造-》AutoResetEvent、ManualResetEvent
- 基元线程同步——内核模式构造(WaitHandle,EventWaitHandle,AutoResetEvent,ManualResetEvent,Semaphore,Mutex)
- C#线程同步(4)- 通知&EventWaitHandle一家
- c#多线程同步之EventWaitHandle再次使用
- C# 线程同步(4)- 通知&EventWaitHandle一家
- 稳扎稳打Silverlight(26) - 2.0线程之Lock, Interlocked, EventWaitHandle, Monitor, ThreadStaticAttribute
- EventWaitHandle
- 【C#】WaitHandle、EventWaitHandle、ManualResetEvent和AutoResetEvent线程同步类