ManualResetEvent详解

ManualResetEvent详解原文来自:http://www.cnblogs.com/tianzhiliang/archive/2011/03/04/1970726.html1.源码下载:下载地址:http://files.cnblogs.com/tianzhiliang/ManualResetEventDemo.rarDemo:2.ManualResetEvent详解…

大家好,又见面了,我是你们的朋友全栈君。

原文来自:http://www.cnblogs.com/tianzhiliang/archive/2011/03/04/1970726.html

1. 源码下载:

    下载地址:http://files.cnblogs.com/tianzhiliang/ManualResetEventDemo.rar

    Demo:

ManualResetEvent详解

2. ManualResetEvent详解

    ManualResetEvent 允许线程通过发信号互相通信。通常,此通信涉及一个线程在其他线程进行之前必须完成的任务。当一个线程开始一个活动(此活动必须完成后,其他线程才能开始)时,它调用 Reset 以将 ManualResetEvent 置于非终止状态,此线程可被视为控制 ManualResetEvent。调用 ManualResetEvent 上的 WaitOne 的线程将阻止,并等待信号。当控制线程完成活动时,它调用 Set 以发出等待线程可以继续进行的信号。并释放所有等待线程。一旦它被终止,ManualResetEvent 将保持终止状态(即对 WaitOne 的调用的线程将立即返回,并不阻塞),直到它被手动重置。可以通过将布尔值传递给构造函数来控制 ManualResetEvent 的初始状态,如果初始状态处于终止状态,为 true;否则为 false。

?
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.Threading;
 
namespace
ManualResetEventDemo
{
    
class
MREDemo
    
{
        
private
ManualResetEvent _mre;
 
        
public
MREDemo()
        
{
            
this
._mre =
new
ManualResetEvent(
true
);
        
}
 
        
public
void
CreateThreads()
        
{
            
Thread t1 =
new
Thread(
new
ThreadStart(Run));
            
t1.Start();
 
            
Thread t2 =
new
Thread(
new
ThreadStart(Run));
            
t2.Start();
        
}
 
        
public
void
Set()
        
{
            
this
._mre.Set();
        
}
 
        
public
void
Reset()
        
{
            
this
._mre.Reset();
        
}
 
        
private
void
Run()
        
{
            
string
strThreadID =
string
.Empty;
            
try
            
{
                
while
(
true
)
                
{
                    
// 阻塞当前线程
                    
this
._mre.WaitOne();
 
                    
strThreadID = Thread.CurrentThread.ManagedThreadId.ToString();
                    
Console.WriteLine(
"Thread("
+ strThreadID +
") is running..."
);
 
                    
Thread.Sleep(5000);
                
}
            
}
            
catch
(Exception ex)
            
{
                
Console.WriteLine(
"线程("
+ strThreadID +
")发生异常!错误描述:"
+ ex.Message.ToString());
            
}
        
}
 
    
}
}

 

?
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
 
namespace
ManualResetEventDemo
{
    
class
Program
    
{
        
static
void
Main(
string
[] args)
        
{
            
Console.WriteLine(
"****************************"
);
            
Console.WriteLine(
"输入\"stop\"停止线程运行..."
);
            
Console.WriteLine(
"输入\"run\"开启线程运行..."
);
            
Console.WriteLine(
"****************************\r\n"
);
 
            
MREDemo objMRE =
new
MREDemo();
            
objMRE.CreateThreads();
 
            
while
(
true
)
            
{
                
string
input = Console.ReadLine();
                
if
(input.Trim().ToLower() ==
"stop"
)
                
{
                    
Console.WriteLine(
"线程已停止运行..."
);
                    
objMRE.Reset();
                
}
                
else
if
(input.Trim().ToLower() ==
"run"
)
                
{
                    
Console.WriteLine(
"线程开启运行..."
);
                    
objMRE.Set();
                
}
            
}
             
        
}
    
}
}

转载于:https://www.cnblogs.com/nele/p/5552451.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/161167.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Redis创建高可用集群教程【Windows环境】

    模仿的过程中,加入自己的思考和理解,也会有进步和收获。在这个互联网时代,在高并发和高流量可能随时爆发的情况下,单机版的系统或者单机版的应用已经无法生存,越来越多的应用开始支持集群,支持分布式部署了。而Redis作为缓存服务器的比较出色的一员,它在出生的时候就被设置支持集群,本篇就是介绍Redis集群的介绍和搭建过程!使用的平台是Windows,搭建的思路和Linux上基本一致! 墙…

  • ENVI5.3安装教程(含软件下载)[通俗易懂]

    ENVI5.3安装教程(含软件下载)[通俗易懂]重要提示:各位安装目录和授权文件存放目录一定不要有中文!!!!!软件下载地址链接:https://pan.baidu.com/s/1W0FXIWoTw0zBzIpn1dLrHw密码:b3hw上文地址如果过期或者不能下载的话可以使用此链接http://pan.baidu.com/s/1eRVvk8i,或者艾特博主。最新地址链接:https://pan.baidu.c…

  • python控制运算的优先顺序(python控制电脑桌面软件)

    Python控制odrive紧接着上一篇文章,来分享一下我的应用过程。先说结论,python编程odrive其实只要写上你之前在odrivetool下的调试命令就行了目前我还只是一个菜鸡,对很多技术都不熟悉或者只知道表面。我也是边做变成长,有哪些不到位的地方可以友善交流。最初的疑惑python也是我最近才开始学习的语言,它可以是一门交互式的语言,如果你知道这一点,那么就知道odrivetool其实就是这样子,你输入命令行然后执行。所以,如果你想控制odrive,只要在python代码中写上诸如o

  • 纳兰诗词

    纳兰诗词“空负凌云万丈志,一生襟抱未曾开”,情雅成诗,爱淡成词,如果没有潋滟坦白的心思,是无法走进古人留在书册中的幻境的。凡心所向,皆是虚妄。——一个人吃饭,旅行,到处走走停停;也一个人看书,弹琴,自己对话谈心。自我收敛,内心沉静,是我希望获得的心境,对纳兰容若不熟的人,恐怕会比较熟悉另外一个名字,纳兰明珠。如果我再说一句《七剑下天山》,恐十白你已经在点头微笑了:你说的是这个人。纳兰容若诞于清顺治

  • 如何安装java-jdk「建议收藏」

    之前第一次安装java-jdk时,因为不太懂,中间出新了很多问题,所以这次安装想记录下。1.进入oracle官网:www.oracle.com2.将Accept前选中,下载jdk,3.打开下载文件夹,双击程序安装4.安装时可以修改路径,这里选择默认路径C:\ProgramFiles\Java\jdk-11.0.25.发现安装完成后并不能使用因为javac.exe在C:\Pr…

  • openCV._imread opencv

    openCV._imread opencv         近日,开始学习图像处理,思前想后决定以opencv作为实验基础。遂完成图片读取和显示功能。Imread作为常用的图像读取函数,虽然简单,但是参数的选择非常重要,直接影响到后期处理。同时在调试学习过程中也可以学习到图像处理的知识。1.函数原型Matimread(constString&filename,intflags=IMREAD_COLOR)…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号