[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: }
本文转自敏捷的水博客园博客,原文链接http://www.cnblogs.com/cnblogsfans/archive/2009/05/21/1486294.html如需转载请自行联系原作者

王德水


相关文章
|
8月前
|
C#
C# | 使用AutoResetEvent和ManualResetEvent进行线程同步和通信
在多线程编程中,AutoResetEvent 和 ManualResetEvent 是两个常用的同步原语。它们用于线程间的通信和协调,以确保线程按照特定的顺序执行。本篇博客将介绍这两种同步原语的概念、用法和区别。
125 0
C# | 使用AutoResetEvent和ManualResetEvent进行线程同步和通信
C# 使用ManualResetEvent 进行线程同步
上一篇我们介绍了AutoResetEvent,这一篇我们来看下ManualResetEvent ,顾名思义ManualResetEvent  为手动重置事件。 AutoResetEvent和ManualResetEvent这两个类经常用到, 他们的用法很类似,但也有区别。
846 0
C#多线程之二:ManualResetEvent和AutoResetEvent
转自博客:http://www.cnblogs.com/charley_yang/archive/2010/10/31/1865663.html 初次体验 ManualResetEvent和AutoResetEvent主要负责多线程编程中的线程同步;以下一段是引述网上和MSDN的解析: 在.Net多线程编程中,AutoResetEvent和ManualResetEvent这两个类经常用到, 他们的用法很类似,但也有区别。
1080 0
|
Windows
重新想象 Windows 8 Store Apps (47) - 多线程之线程同步: Semaphore, CountdownEvent, Barrier, ManualResetEvent, AutoResetEvent
原文:重新想象 Windows 8 Store Apps (47) - 多线程之线程同步: Semaphore, CountdownEvent, Barrier, ManualResetEvent, AutoResetEvent [源码下载] 重新想象 Windows 8 Store Apps (...
707 0
多线程中的ManualResetEvent
先来看一下简单的多线程控制台程序: using System;using System.Threading;namespace ManualResetEventStudy{    class ThreadClass    {        static void t1()        {    ...
564 0
|
9天前
|
NoSQL Redis
单线程传奇Redis,为何引入多线程?
Redis 4.0 引入多线程支持,主要用于后台对象删除、处理阻塞命令和网络 I/O 等操作,以提高并发性和性能。尽管如此,Redis 仍保留单线程执行模型处理客户端请求,确保高效性和简单性。多线程仅用于优化后台任务,如异步删除过期对象和分担读写操作,从而提升整体性能。
32 1
|
3月前
|
存储 消息中间件 资源调度
C++ 多线程之初识多线程
这篇文章介绍了C++多线程的基本概念,包括进程和线程的定义、并发的实现方式,以及如何在C++中创建和管理线程,包括使用`std::thread`库、线程的join和detach方法,并通过示例代码展示了如何创建和使用多线程。
62 1
|
3月前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
38 3
|
3月前
|
Java 开发者
在Java多线程编程中,选择合适的线程创建方法至关重要
【10月更文挑战第20天】在Java多线程编程中,选择合适的线程创建方法至关重要。本文通过案例分析,探讨了继承Thread类和实现Runnable接口两种方法的优缺点及适用场景,帮助开发者做出明智的选择。
27 2