`
lovnet
  • 浏览: 6725864 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

(三)线程--等待句柄(示例下载)

 
阅读更多

(一).描述
本示例代码实现线程等待等待执行,比如一个线程在执行之前要等待所有其它线程或某个线程
先执行完成,或者等待其它线程至少一个执行完成.
(二).代码
using System;
using System.Runtime.Remoting.Messaging;
using System.Threading;

namespace 等待句柄
{
//委托声明(函数签名)
delegate string MyMethodDelegate();
class MyClass
{
//要调用方法1
public string Write1()
{
for(double i = 0; i < 100000000000;i++) //此数值大小可以根据自己的环境修改,
//目的是让此方法延长时间而已
{
//延长时间(模拟实际任务)
}
Console.WriteLine("执行方法1");
return "";
}

//要调用方法2
public string Write2()
{
Console.WriteLine("执行方法2");
return "22222222222222";
}

//要调用方法3
public string Write3()
{
Console.WriteLine("执行方法3");
return "33333333333333";
}

[STAThread]
static void Main(string[] args)
{
MyClass myClass = new MyClass();
MyMethodDelegate d1 = new MyMethodDelegate(myClass.Write1);
MyMethodDelegate d2 = new MyMethodDelegate(myClass.Write2);
MyMethodDelegate d3 = new MyMethodDelegate(myClass.Write3);

AsyncResult myResult1,myResult2,myResult3; //此类封闭异步委托异步调用的结果,通过AsyncResult得到结果.
myResult1 = (AsyncResult)d1.BeginInvoke(null,null); //调用

myResult2 = (AsyncResult)d2.BeginInvoke(null,null);

myResult3 = (AsyncResult)d3.BeginInvoke(null,null);

//建立WaitHandle数组对象
WaitHandle[] waitHandle = new WaitHandle[3]{myResult1.AsyncWaitHandle,myResult2.AsyncWaitHandle,myResult3.AsyncWaitHandle};

/*
try
{
//等待三个异步方法中的至少一个执行完成,才继续执行下面的语句
WaitHandle.WaitAny(waitHandle);
}
catch(Exception ex)
{
throw new Exception(ex.Message);
}
*/

myResult1.AsyncWaitHandle.WaitOne(); //如果当前异步方法还没有完成,此异步方法执行完毕才往下执行
myResult2.AsyncWaitHandle.WaitOne();
myResult3.AsyncWaitHandle.WaitOne();

/*
myResult1.AsyncWaitHandle.WaitOne(TimeSpan.FromSeconds(1),false); //如果当前异步方法还没有完成,则等待一秒的时间执行此方法; 如果一秒后此方法还未完成的话,则不再等待,继续往下执行
myResult2.AsyncWaitHandle.WaitOne();
myResult3.AsyncWaitHandle.WaitOne();
*/

Console.WriteLine("测试等待句柄"); //标记语句用.
Console.Read();
}
}
}


本示例代码已经测试,能够正常运行!


(三).示例下载
http://www.cnblogs.com/Files/ChengKing/ThreadExample.rar

分享到:
评论

相关推荐

    CreateThread创建多线程与单线程比较

    用CreateThread()函数创建线程将返回一个线程句柄,通过该句柄你可以控制和操作该线程,当你不用时可以一创建该线程后就关闭该句柄,有专门的函CloseHandle()。关闭句柄不代表关闭线程,只是你不能在外部控制该...

    VB创建线程动态链接库(VBCreateThread.dll)

    返回值:线程句柄 long型 VB申明及参数示例: Public Declare Function CreateThreadE Lib "VBCreateThread.dll" (ByVal address As Long, ByVal p0 As Long, ByVal p1 As Long, ByVal p2 As Long, ByVal p3 As Long)...

    MFC多线程编程实例三个

    本程序使用TAB控件生成了3个Dialog,每个dialog上都有一个简单的MFC多线程实例,简单易懂,且有注释,是MFC多线程学习的好帮手,多线程传参数:传递窗口句柄等等

    c#线程同步使用详解示例

    然而,线程的异步特性意味着必须协调对资源(如文件句柄、网络连接和内存)的访问。否则,两个或更多的线程可能在同一时间访问相同的资源,而每个线程都不知道其他线程的操作。 线程同步的方式 线程同步有:临界区、...

    易语言JSON模块:STJson2.3(开源+示例) - 纯算法

    当存在 路径 和 句柄 参数时,如果 句柄 大于 0,而且路径也存在时,则基于 句柄 执行二次寻址。 2.1 修复了逻辑型和NULL类型取值和取文本出错的问题。 修复了上个版本取逻辑和null文本出错和取值内容不正确的问题...

    JimStone(谢栋) - JSON模块:STJson2.3(开源+示例) - 纯算法-易语言

    2.3 优化多线程支持 修复了负数解析是出现的“解析数值出错”错误 优化了多线程的支持。去除了所有“打开内存文件”改用 快速字节集对象 快速解析对象使用方法 类: 快速JSON解析类 / STFastJson 取句柄() / get_...

    java-concurrency-in-practice:Brian Goetz的“实践中的Java并发性”一书中的注释和示例

    Brian Goetz于2006年出版的《 Java并发实践》一书中的注释和示例。 勘误表: : 前言 第一章:简介 操作系统经过改进,可以一次运行多个程序,并在进程中运行各个程序:操作系统由OS为其分配资源(例如内存,文件...

    android 音视频实时采集示例

    利用MediaRecord中的setOutputFile实时获取音视频数据流,在Android中,TCP Socket可以看作是一个文件句柄,我们可以建立本地的TCP监听线程,在线程中进行数据处理.应该对大家有点帮助。

    Windows 内核情景分析--采用开源代码ReactOS (上册) part01

    6.3 线程的等待/唤醒机制 470 6.4 信号量(Semaphore) 499 6.5 互斥门(Mutant) 505 6.6 事件(Event) 512 6.7 命名管道(Named Pipe)和信插(Mailslot) 516 6.8 本地过程调用(LPC) 521 6.9 视窗报文...

    精通Windows.API-函数、接口、编程实例.pdf

    7.3 等待进程和线程的执行完成 209 第8章 服务 210 8.1 基本概念 210 8.1.1 服务控制器(SCM) 211 8.1.2 服务程序 211 8.1.3 服务控制管理程序 211 8.1.4 系统服务管理工具 211 8.1.5 服务的属性 211...

    Thinking in Java(中文版 由yyc,spirit整理).chm

    2.1 用句柄操纵对象 2.2 必须创建所有对象 2.2.1 保存在什么地方 2.2.2 特殊情况:主类型 2.2.3 Java中的数组 2.3 绝对不要清除对象 2.3.1 作用域 2.3.2 对象的作用域 2.4 新建数据类型:类 2.4.1 字段和方法 2.5 ...

    JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm

    2.1 用句柄操纵对象 2.2 必须创建所有对象 2.2.1 保存在什么地方 2.2.2 特殊情况:主类型 2.2.3 Java中的数组 2.3 绝对不要清除对象 2.3.1 作用域 2.3.2 对象的作用域 2.4 新建数据类型:类 2.4.1 字段和方法 2.5 ...

    VC TCP服务端编写实例.rar

     程序完成消息翻译、连接服务器、建立线程、客户端发送信息、服务器接收消息、获得socket句柄、进程互斥、获取本地计算机的标准IP地址,如"127.0.0.0"、等待一个网络连接、关闭一个连接并关闭一个socket等功能,对...

    易语言-易语言JSON模块:STJson2.3(开源+示例) - 纯算法

    当存在 路径 和 句柄 参数时,如果 句柄 大于 0,而且路径也存在时,则基于 句柄 执行二次寻址 2.1 修复了逻辑型和NULL类型取值和取文本出错的问题 修复了上个版本取逻辑和null文本出错和取值内容不正确的问题(忘记...

    python和pywin32实现窗口查找、遍历和点击的示例代码

    Pywin32是一个Python库,为python提供访问Windows API的扩展,提供了齐全的windows常量、接口、线程以及COM机制等等。 1.通过类名和标题查找窗口句柄,并获得窗口位置和大小 import win32gui import win32api ...

    MFC Windows程序设计(第2版修订版)--源代码

    第3部分涵盖了一些Windows和MFC的更鬲级的功能,如颜色选项板、位图句柄及多线程程序。在第4部分,您将了解到MFC如何包容COM、OLE和ActiveX,如何编写支持COM的组件及应用程序。在读完第21章之后,您将更加精通使用...

    内存高效的匿名函数:获取匿名函数清除非必要的工作区变量-matlab开发

    有关示例和进一步讨论,请参阅这些线程http://www.mathworks.com/matlabcentral/answers/115569-what-extra-data-is-stored-by-an-anonymous-function ...

    MFC教程入门知识全集.rar

    10.5.3 实例三:基于字符界面的聊天程序 第11 章 线程间的同步 11.1 进程和线程的概念 11.2 Win32 的线程 11.2.1 线程的创建 11.2.2 线程的终止 11.2.3 实例:通过创建多线程来编写网络聊天程序 11.3 MFC 的...

Global site tag (gtag.js) - Google Analytics