`
wangdeshui
  • 浏览: 247204 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[tips]: 多线程 ManualResetEvent

阅读更多

WaitHandle用于实现对共享资源的独占访问,AutoResetEvent和ManualResetEvent都继承自它。 WaitHandle.WaitOne方法将阻塞当前线程,直到WaitHandle收到信号。但有时候,我们需要非阻塞的方式测试WaitHandle 状态。

public virtual bool WaitOne(int millisecondsTimeout)

可以指定等待的时间间隔。如果当前实例收到信号,则为true;否则为false。特别地,如果 millisecondsTimeout为零,则该方法不会进入阻塞状态。该方法会测试等待句柄的状态并立即返回。

ManualResetEvent mre=new ManualResetEvent(false)  //默认无信号

mre.set()可以让当前实例获得信号

现在我们先让程序每个10秒输出Hello world,可以这么写:

 

   1: using System;
   2: using System.Collections.Generic;
   3: using System.Linq;
   4: using System.Text;
   5: using System.Threading;
   6:  
   7: namespace MultiThread
   8: {
   9:     public class Program
  10:     {
  11:         static ManualResetEvent mre = new ManualResetEvent(false);
  12:         static void Main()
  13:         {
  14:             Thread t = new Thread(new ThreadStart(Hello));
  15:             t.Start();
  16:             while (true)
  17:             {
  18:                 char a = Console.ReadKey().KeyChar;
  19:                 if (a.ToString().ToUpper() == "X")
  20:                 {
  21:                     mre.Set();
  22:                     t.Abort();
  23:                     t.Join();
  24:                     Console.WriteLine(t.Name + " stopped");
  25:                     break;
  26:                 }
  27:             }
  28:         }
  29:  
  30:         static void Hello()
  31:         {
  32:             while (true)
  33:             {
  34:                 if (mre.WaitOne(1 * 1000)) break;
  35:                 Console.WriteLine("Hello");
  36:             }
  37:         }
  38:     }
  39: }
  40:  
分享到:
评论

相关推荐

    C#线程同步ManualResetEvent

    简单讲解ManualResetEvent用法,DEMO可以运行,简单易懂

    C# ManualResetEvent使用方法详解

    当一个线程开始一个活动(此活动必须完成后,其他线程才能开始)时,它调用 Reset 以将 ManualResetEvent 置于非终止状态,此线程可被视为控制 ManualResetEvent。调用 ManualResetEvent 上的 WaitOne 的线程

    C#-【多线程篇】AutoResetEvent和ManualResetEvent的区别(中级)

    引入命名空间: using System.Threading; AutoResetEvent: autoResetEvent.WaitOne();//运行完后,**自动将事件...ManualResetEvent: manulResetEvent.WaitOne();//运行完后,**不会自动将事件状态设置为无信号**

    C# 多线程同步与互斥,使用Mutex和AutoResetEvent类

    C# 使用Mutex和AutoResetEvent类处理多线程同步与互斥,调试并完善了网上文档的代码。经测试能很好地实现要求,但还有一些地方不是特别明白,都写在注释中了,请高手给予指点。

    c#多线程学习入门经典

    C#多线程学习(一) 多线程的相关概念 什么是进程? 什么是线程? 什么是多线程? 多线程的好处 多线程的不利方面 线程操作的关键对象和语句 任何程序在执行时,至少有一个主线程。 Thread类有几个至关重要的方法 C#...

    C#多线程学习入门圣典

    C#多线程学习入门圣典 doc文档,对关键字进行排版和着色. 可以一目了然的进行学习 C#多线程学习(一) 多线程的相关概念 1 什么是进程? 1 什么是线程? 1 什么是多线程? 1 多线程的好处 1 多线程的不利方面 1 线程...

    多线程实验_1

    C#多线程实验,就AutoResetEvent,ManualResetEvent,Thread.join(),委托多线程回调。

    C#多线程学习入门圣典(修改版)

    C#多线程学习(一) 多线程的相关概念 1 什么是进程? 1 什么是线程? 1 什么是多线程? 1 多线程的好处 1 多线程的不利方面 1 线程操作的关键对象和语句 2 任何程序在执行时,至少有一个主线程。 2 Thread类...

    C# ManualResetEvent用法详解

    主要介绍了C# ManualResetEvent用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    ManualResetEvent继续等待.rar

    ManualResetEvent继续等待,ManualResetEvent超时后重置,VBNET源码,C#可用

    NET多线程同步方法详解

    .NET多线程同步方法详解(一):自由锁(InterLocked) 本文主要描述在C#中线程同步的方法。线程的基本概念网上资料也很多就不再赘述了。直接接入主题,在多线程开发的应用中,线程同步是不可避免的。在.Net框架中,...

    ManualResetEvent最简单的测试代码

    这是一个ManualResetEvent最简单的测试代码,用最简单的代码解释了ManualResetEvent的用法。

    详细解析C#多线程同步事件及等待句柄

    最近捣鼓了一下多线程的同步问题,发现其实C#关于多线程同步事件处理还是很灵活,这里主要写一下,自己测试的一些代码,涉及到了AutoResetEvent 和 ManualResetEvent,当然还有也简要提了一下System.Threading....

    ManualResetEvent的用法

    ManualResetEvent的用法.日积月累

    C#多线程面面观(博客源码)

    主要分为八个部分:1.线程Thread;2.后台线程BackGroundWorker;3.互斥锁Monitor、Lock、Mutex;...8.其他,UI多线程,Timer等;博客地址:http://blog.csdn.net/pfe_nova/article/details/38470873

    AutoResetEvent_Examples.zip_AutoResetEvent_ManualResetEvent

    线程事例代码,ManualResetEvent,AutoResetEvent

    C#实现多线程的同步方法实例分析

    直接接入 主题,在多线程开发的应用中,线程同步是不可避免的。在.Net框架中,实现线程同步主要通过以下的几种方式来实现,在MSDN的线程指南中已经讲了几种,这里结合作者实际中用到的方式一起说明一下。 1. 维护...

    ManualResetEvent Timer组件 托管函数 委托加减 我的委托 AsyncCallback

    ManualResetEvent Timer组件 托管函数 委托加减 我的委托 AsyncCallback

    vb.net C#线程锁超时控制代码

    ManualResetEvent是一个超时等待的线程锁,如果超时返回false,接收指令显示true,但是没法实现在超时后让他继续等待,这种需求我们可以用在以下场景: 控制线程超时方法 1.[主线程]:请求方发送请求,立即创建超时等待...

    ManualResetEvent类的实例介绍

    ManualResetEven类的reset,waione,set方法的详细介绍,有多个实事例帮助理解

Global site tag (gtag.js) - Google Analytics